probleme avec sockets : fonctionnement aléatoire

probleme avec sockets : fonctionnement aléatoire - C++ - Programmation

Marsh Posté le 20-02-2008 à 14:47:44    

Hello !
 
Voilà je suis en train de programmer un petit jeu de quizz en réseau, et je bloque sur les sockets, ou plus particulièrement sur la gestion du buffer que j'utilise je pense.
 
En gros, j'ai déclaré un buffer au début du type :
 
char* buffer = new char[255].
 
mon programme marche une fois sur 2, cad que parfois des variables disparaissent (elles sont "écrasées" je pense par le buffer). J'utilise memset pour clean le buffer avant chaque send ou receive :
 
memset(buffer,0,sizeof(buffer));  
 
 
J'ai ensuite testé avec un buffer de type non pointeur (j'ai un peu du mal avec les pointeurs en fait :d):
 
char buffer[256];
 
mais le résultat est le même.
 
Le problème est que les données de mon programme disparaisse (par exemple, la variable renvoyée par serie.get_reponse1() est parfois effacée, parfois pas).
Je vous laisse un bout de code, si quelqu'un voit ce que je fait mal je serais ravi de l'apprendre, depuis le temps que je cherche la dessus :(
 
donc là c'est le serveur (le problème apparait existe avant le send au client, donc pas besoin du client) :
 

Code :
  1. WSADATA WSAData;
  2. WSAStartup(MAKEWORD(2,0), &WSAData);
  3. SOCKET sock;
  4. SOCKADDR_IN sin;
  5. SOCKET mayosock;
  6. SOCKADDR_IN mayosin;
  7. SOCKET ketchupsock;
  8. SOCKADDR_IN ketchupsin;
  9. sock = socket(AF_INET, SOCK_STREAM, 0);
  10. sin.sin_addr.s_addr   = INADDR_ANY;
  11. sin.sin_family    = AF_INET;
  12. sin.sin_port    = htons(2048);
  13. bind(sock, (SOCKADDR *)&sin, sizeof(sin)); 
  14. listen(sock, 0);
  15. int sinsize = sizeof(mayosin);
  16. mayosock = accept(sock, (SOCKADDR *)&mayosin, &sinsize);
  17. char buffer[256];
  18. memset(buffer,0,sizeof(buffer));
  19. recv(sock,buffer,256,0);
  20. equipe=buffer;
  21. cout << "Bienvenue " << nom_joueur << " , vous etes dans l'equipe " << equipe << endl;
  22. memset(buffer,0,sizeof(buffer));
  23. //buffer = (char*)serie.get_nom_serie().c_str(); // ca c'était pour quand mon buffer etait de type char*
  24. strcpy(buffer, serie.get_nom_serie().c_str());
  25. send(mayosock, buffer, strlen(buffer),0);
  26. memset(buffer,0,sizeof(buffer));
  27. //buffer = (char*)serie.get_reponse1().c_str();
  28. strcpy(buffer, serie.get_reponse1().c_str());
  29. send(mayosock, buffer, strlen(buffer),0);


Message édité par bottedumal le 20-02-2008 à 14:49:27
Reply

Marsh Posté le 20-02-2008 à 14:47:44   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed