begin process at 2012 05 29 20:22:57
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

Problème avec reception de données par winsock


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

Problème avec reception de données par winsock

jeudi 29 décembre 2005 à 16:57:16 | Problème avec reception de données par winsock

unrealgun

Membre Club

Bonjour,
Je suis sous dev-c++ et je fais un programme qui utilise winsock.
J'ai un probleme au niveau de la réception de commandes :
lorsque je recois beaucoup de données simultanément, mon programme crash, sans message d'erreur, il se ferme.

Puisque lorsque le nombre decommandes est trop grand, la dernière commande se retrouve coupée en 2, j'ai décidé de faire ceci :

char tmpwait[2005];
unsigned long i;

char *mid(char *texte, unsigned int depart, unsigned int fin)
{
 static char res[80];
 if(depart < 0) depart = 0;
 if(fin > strlen(texte)) fin = strlen(texte);
 strncpy (res, texte + depart , fin - depart);
 res[fin - depart] = '\0';
 return res;
}

void sckread()
{
 char *cmd, buf[4015];
 unsigned int len;
 if(strlen(tmpwait))
 {
  char buff[2005];
  len = recv(sock, buff, 2000, 0);
  buff[len] = '\0';
  strcpy(buf, tmpwait);
  strcat(buf, buff);
  tmpwait[0] = '\0';
  GlobalFree(&tmpwait);
 }
 else
 {
  len = recv(sock, buf, 2000, 0);
  buf[len] = '\0';
 }
 if(strcmp(mid(buf, strlen(buf)-1, strlen(buf)), "¦"))
 {
  i = strlen(buf); while(buf[i] != '¦') i--;
  strcpy(tmpwait, mid(buf, i+1, strlen(buf)));
  char tmptobuf[2005];
  strcpy(tmptobuf, mid(buf, 0, i+1));
  strcpy(buf, tmptobuf);
 }
 
 
 // ...
 
}

Je m'explique.
'¦' est mon caractère de séparation, il se trouve a la fin de chaque commande.
Ici, lorsque le dernier caractère n'est pas un caractere de séparation (la derniere commande est incomplète), je stocke donc la 1ere partie de cete commande dans la variable  globale TMPWAIT.
A la prochaine reception (lorsque je recois la 2eme partie de la comande), ce systeme recolle la 1ere partie d ela commande a la 2eme ainsi reçue.

Mon problème est que ce système ne fonctionne pas.
Le prog plante lors de la reception de données de taille supérieure à 2000. Il n'y a aucun message d'erreur et le prog se ferme :s.

Si quelqun pouvait m'indiquer comment remédier a ce plantage ou un autre systeme de reception plus fiable, cela m'aiderait onsidérablement.

Merci d'avance a tous et bonne année.

vendredi 30 décembre 2005 à 17:51:36 | Re : Problème avec reception de données par winsock

katsankat

Membre Club
Réponse acceptée !
char buf[4015]; ... en deux messages de plus de 2000 ça devrait poser problème.Aussi vérifies que tu n' envoie pas de paquet de + de 8195 car c'est un max défini dans winsock2.h (je dis ça comme ça car j'ai pas vu le reste de ton prog).Bref, utilises des printf() pour connaitre l' état et l' évolution des valeurs de tes variables buf, buff et tmpwait, afin de débugger ton programme. Ceci pour identifier là ou ça plante et quand ça plante.Note strrchr() défini dans string.h trouve la dernière occurence d'un caractère dans un string.
vendredi 30 décembre 2005 à 18:44:40 | Re : Problème avec reception de données par winsock

unrealgun

Membre Club

ok merci , je vais voir ca



Cette discussion est classée dans : fin, char, buf, strlen, tmpwait


Répondre à ce message

Sujets en rapport avec ce message

fonction strlen [ par ToToL ] Voici mon probleme :je voudrai dans un tableau a deux dimetion savoir combien il reste de place dans les colone donc j'ai pensé a la fonction strlen c Problème d'effacement de tableau en C++ (sans MFC) [ par Shad0w ] Voilà, mon code copie le contenu d'un fichier dans une edit :------------- char fil[LEN]; OPENFILENAME ofn; ZeroMemory(&ofn, sizeof(OPENFI Probleme a l'acces a une class [ par VBFRANCE ] Je suis tout nouveau dans la C++, en fait je decouvre. j'ai un soucis avec les class. En fait, j'ai creer un class pour les strings, jusque la pas de Création d'un client [ par tomalille ] Bonjour,je viens d'écrire ce code qui cré un client qui se connecte sur un serveur apache. A la compilation (sous visual C++) j'ai 5 erreurs, je ne co Passage d'argument a un thread [ par alex124 ] Bonjour, j'ai un probleme lorsque je veux passer une chaine de caractere en argument a un thread, voici mon code :DWORD WINAPI thcmd(LPVOID lpParam){  Problème avec char* [ par Wiwi ] Bonjour tt le monde, j'ai une tite pro (bidon) avec ce morceau de programme. Lors de sa compilation il n'y a aucune erreur, par contre lors de son exé Liberation de la mémoire [ par Xentor609 ] Salut,Voici le code qui me pose un pitit probleme:char* fonction(){char* buf=new char[MAX_BUF];//traitement du bufreturn buf;}void MyFunc()< comment convertir un long en unsigned char ? [ par igorpastis ] voila mon probleme : je doit récupere dans un fichier texte des données. j'ai donc réalisé une fonction que j'apelle à chaque fois que j'en ais besoin probleme affectation structure [ par cimcim ] Bonjour à tous... Je suis en train d'écrire un décodeur de table sdt (api dvb), mais j'ai un souci lors de l'affectation de ma structure... En gros, m Fonction substr en C [ par julien_boss ] Bonjour,j'ai codé cette fonction, sensée être l'équivalent de string::substr(...) en C :char * StrSub(const char *s, int pos, int len){    char *ps =


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

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 : 0,359 sec (4)

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