begin process at 2012 05 28 14:55:41
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

buggage


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

buggage

mardi 2 mai 2006 à 14:22:51 | buggage

logant83

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?
mardi 2 mai 2006 à 18:43:44 | Re : buggage

wxccxw

Membre Club
quel est l'erreur :)


mardi 2 mai 2006 à 18:44:30 | Re : buggage

wxccxw

Membre Club
soyons plus explicite. qu'est-ce qu'il ecrit a l'ecran


mardi 2 mai 2006 à 18:55:59 | Re : buggage

logant83

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 ?
mardi 2 mai 2006 à 19:35:44 | Re : buggage

excrt

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 =-=-
mardi 2 mai 2006 à 20:50:57 | Re : buggage

logant83

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


Cette discussion est classée dans : buffer, ligne, char, sin, sock


Répondre à ce message

Sujets en rapport avec ce message

SVP besoin d'aide [ par seito ] [size=5] seito [/size]j'ai déveloper une apploication pour transferer des fichiersla reception est parfaite pourtant à l'envoie ça me cause des tas de Probléme pour lire le buffer au lancement de la connexion [ par logant83 ] Bonsoir, voila enfaite j'ai établi une connexion sur un server irc grace au socket mais quand je recois sur le buffer les différente informations (Ell client serveur echange de donne [ par bapdur ] voici la version dun client et dun serveur que je fais pour un jeu mais les donnes son envoyer en continu jaimerais aire en sorte que si je tape un ca pb de compilation (prog utilisant un socket) [ par smook ] boujour a tous bon je vais commencer part bien vous detailler ce qui a detailler : j utilise dev c++ 4.9.9.2 et mon ^programme a pour but d ecouter un Winsock : Le nom de la machine [ par wxccxw ] hello tout le monde, bon voila j'ai un petit probleme, j'essay de recuperer le nom de ma machine par Winsock (si vous connaisez un proceder plus simpl Création d'un client IRC,reception ok, emission: pas bon [ par freekid ] Bonjour tout le monde,je bosse actuellement sur la création d'un client IRC.Pour l'instant il s'agit d'un simple mode console.Et donc quand le program Problème dialogue socket [ par Crazy_Joe ] Bonjour à tous, voilà j'ai un problème avec les sockets. Je voudrais me connecter au serveur pop de free sur le port 110 et récupérer le nombre d'ema [socket et api win]recevoir et envoyer en meme temps [ par shadow1779 ] Bonjour je me suis fais un petit programme irc qui me servira de bot pour auto-op des personne ou d'autre taches diverses, le client aura une boite de utilisation basique de winsock [ par Spiffou ] bonjour à tousj'essaie d'apprendre winsock en vc++ mode console pour le moment, et j'ai qlq difficultés...en gros j'etabli bien une connection entre l link avec GCC [ par mrjulien ] Bonjours a tous.Je compile avec gcc sous windows (grâce a mingw). Je ne souhaite pas vous ennuyer en créant un topic redondant, mais je n'arrive pas à


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 7,114 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales