Buggage

logant83 Messages postés 90 Date d'inscription lundi 20 février 2006 Statut Membre Dernière intervention 6 mars 2007 - 2 mai 2006 à 14:22
logant83 Messages postés 90 Date d'inscription lundi 20 février 2006 Statut Membre Dernière intervention 6 mars 2007 - 2 mai 2006 à 20:50
Bonjour, voila enfaite je suis sous devc++ et je code un service irc et je sais pas ce qui se passe, de temp en temp window m'envoy une erreur comme koi
ya une erreur dans mon programme et qui faut le fermer, alors que pendant 30 mins je l'utilise et j'ai aucun probléme mais au moment ou je mis attend pas il se cré une erreur.

/*
/* J'initialise ma socket */
WSADATA WSAData; /* Pour win seulement */
WSAStartup(MAKEWORD(2,0), &WSAData);
/* Je construit ma socket */
SOCKET sock;
SOCKADDR_IN sin;
char buffer[4096];
char *ptr;
char msg[256];
char bp[512];
int i;

sock = socket(AF_INET,SOCK_STREAM,0);
sin.sin_addr.s_addr = inet_addr(servip);
sin.sin_family = AF_INET;
sin.sin_port = htons(servport);
int Fin;
char tmpData[1024+1];
buffer[0] = 0;
while(1)
{
Fin = recv(sock, tmpData, 1024, 0);
if (Fin > 0)
{
tmpData[Fin] = 0;

if (Fin + strlen(buffer) < 4096)
strcat(buffer, tmpData);

Donnetraitement(buffer, sock);
}
else
break;
}
}

void Donnetraitement(char *buffer, int sock)
{
char *ptr;
char msg[500];
int Pos = strstr(buffer, "\r\n") - buffer;
char Ligne[2048];

if (Pos < 0)
return;

if (Pos > 2048)
{
ZeroMemory(buffer, 4096); //Tout détruires
return;
}

do
{
CopyMemory(Ligne,buffer, Pos);
Ligne[Pos] = 0;
int x = 0;
int z = 1;
int y = 0;
int u = 0;
char mot[1000] = {};
char mot2[1000] = {};
char mot3[1000] = {};
char mot4[1000] = {};
char mot5[1000] = {};
char mot6[1000] = {};
char mot7[1000] = {};
char autre[1];
while(Ligne[x] != '\0')
{
if (Ligne[x] == ':' && z == 1) {x++;}
autre[y]=Ligne[x];
x++;
if (strpbrk(autre, " ") == NULL)
{
if (z == 1) { strncat(mot, autre,1); }
if (z == 2) { strncat(mot2, autre,1); }
if (z == 3) { strncat(mot3, autre,1); }
if (z == 4) { strncat(mot4, autre,1); }
if (z == 5) { strncat(mot5, autre,1); }
if (z == 6) { strncat(mot6, autre,1); }
if (z == 7) { strncat(mot7, autre,1); }
}
if (strpbrk(autre, " ") != NULL) { z++; }
}
printf("%s\n",Ligne);
autre[y]=mot3[0];
if (strstr(buffer, "PING :"))
{
ptr = strstr(Ligne, "PING :") + strlen("PING :");
snprintf(msg, 256, "PONG :%s\n", ptr);
send(sock, msg, strlen(msg), 0);
}
if (strcmp(mot2,"PRIVMSG") == 0) {
if (strcmp(autre,"#") > 0) {
msgbuffer(Ligne, sock, mot, mot2, mot3, mot4, mot5, mot6);
}
if (strcmp(autre,"#") 0) { printf("Ici message sur les canaux> Voir sur le CS\n"); return; }
}
if (strcmp(mot2,"EOS") == 0) {
sprintf (Ligne, ":%s GLOBOPS Syncronisation au server terminée \r\n",csnick);
send (sock, Ligne, strlen (Ligne), 0);
}
if (strcmp(mot,"NICK") == 0) {
sprintf (Ligne, ":%s PRIVMSG #sphere :NicK Connecté (%s) depuis [%s@%s] sur le server %s \r\n",csnick,mot2,mot5,mot6,mot7);
send (sock, Ligne, strlen (Ligne), 0);
}
if (strcmp(mot2,"QUIT") == 0) {
sprintf (Ligne, ":%s PRIVMSG #sphere :NicK Déconnecté (%s) \r\n",csnick,mot);
send (sock, Ligne, strlen (Ligne), 0);
}
strcpy(buffer, buffer + Pos + 2); //Éliminer la ligne

Pos = strstr(buffer, "\r\n") - buffer;
}
while (Pos >= 0 && Pos <= 1024);
}

Vous avez une idée?

5 réponses

wxccxw Messages postés 755 Date d'inscription samedi 15 mai 2004 Statut Membre Dernière intervention 30 janvier 2011
2 mai 2006 à 18:43
quel est l'erreur :)
0
wxccxw Messages postés 755 Date d'inscription samedi 15 mai 2004 Statut Membre Dernière intervention 30 janvier 2011
2 mai 2006 à 18:44
soyons plus explicite. qu'est-ce qu'il ecrit a l'ecran
0
logant83 Messages postés 90 Date d'inscription lundi 20 février 2006 Statut Membre Dernière intervention 6 mars 2007
2 mai 2006 à 18:55
Euh vi escuse moi , je me suis male expliqué.

Enfaite c windows qui m'envoy un message d'erreur

tu vois la fenêtre de windows XP qui dit que le programme a rencontré une erreur d'exécution et qui te demande si tu veux envoyer le rapport d'erreur a windows?

hé bein c cette fenêtre qui mes affiché, mais enfaite je comprend pas parce que le programme se déroule correctement pendant plusieur minutes quand il recois pas bcp de donnée et quand le programme recois bcp de donnée plusieur fois la windwos m'envoy le message d'erreur, car au départ le code en haut hé un thread qui gére les messages du buffer et une fois qui recois le buffer paquet par paquet il découpe la chaine en plusieur mots .... alors est ce que c le thread qui recois trop d'infos... ou c quand je découpe la chaine... enfaite je sais pas, mais je pense que si tu es sur ce forum ces que tu as de l'expérience (en tous cas plus que moi) et que toi tu pourras m'aider ...

alors.. ta pas un meilleur thread? ou tu peux pas me dire ce que je dois faire pour enrailler ce probléme ?
0
excrt Messages postés 75 Date d'inscription mercredi 5 avril 2006 Statut Membre Dernière intervention 3 juillet 2006
2 mai 2006 à 19:35
char mot[1000] = {};
char mot2[1000] = {};
char mot3[1000] = {};
char mot4[1000] = {};
char mot5[1000] = {};
char mot6[1000] = {};
char mot7[1000] = {};
/* ... */
if (strpbrk(autre, " ") == NULL)

{

  if (z == 1) { strncat(mot, autre,1); }

  if (z == 2) { strncat(mot2, autre,1); }

  if (z == 3) { strncat(mot3, autre,1); }

  if (z == 4) { strncat(mot4, autre,1); }

  if (z == 5) { strncat(mot5, autre,1); }

  if (z == 6) { strncat(mot6, autre,1); }

  if (z == 7) { strncat(mot7, autre,1); }

}
/* ... */

/*
 * pourquoi pas ceci?
 */
char mots[7][1000]; /* un petit peu « mieux » non? un peu plus « propre/compréhensible/... » */
/* ... */
/* il ne faut pas oublier d'initialiser les chaines avant les « strncat() » (chose que tu ne fais pas dans ton code) */
/* strcat()/strncat() se déplacent jusqu'au '\0' avant l'ajout/concaténation, donc il nous faut des '\0' ! */
mots[0][0] = '\0';
mots[1][0] = '\0';
mots[2][0] = '\0';
mots[3][0] = '\0';
mots[4][0] = '\0';
mots[5][0] = '\0';
mots[6][0] = '\0';
/* ou autre ... */

if (strpbrk(autre, " ") == NULL && ((unsigned)z <= 6)) {
  strncat(mots[z], autre, 1);
}

utilise « memset()/memcpy() » plutôt que « ZeroMemory()/CopyMemory() », ils sont beaucoup plus rapide
ZeroMemory()/CopyMemory() ne sont pas plus « safe » de toute facon

etc...

et comme l'a dit wxccxw, le message d'erreur « exact » aiderait beaucoup ...

-=-= ExCRT =-=-
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
logant83 Messages postés 90 Date d'inscription lundi 20 février 2006 Statut Membre Dernière intervention 6 mars 2007
2 mai 2006 à 20:50
vi merci pour tes éclairement :) mais comme je l'ai dit précédament, le programme ne me revois aucune erreur, mais windows m'affiche un dialoque disant que une erreur c'est produite, et il me ferme le programme, comme si le programme subissait une surcharge de donnée
0
Rejoignez-nous