Communication UDP [Résolu]

Communication UDP [Résolu] - C++ - Programmation

Marsh Posté le 31-08-2008 à 18:59:03    

Bonjour.
 
J'ai besoin d'une communication UDP dans un jeu et j'ai quelques soucis que je ne pige pas.
J'ai donc un serveur qui envoit des infos aux clients. Le code est portable et compile sous linux et windows. Seul souci, le client ne fonctionne pas sous windows...
Sous Linux aucun problème communication ok.
Serveur sous windows et client sous linux ok.
Client sous windows => problème. La fonction recvfrom me renvoit toujours -1 (par contre le client peut envoyer via la même socket) et errno=0.
Si quelqu'un comprend pourquoi ce -1 (avec errno=0)...
 
ptit bout de code:
 
Serveur:

Code :
  1. JoueurReseau *jj=dynamic_cast<JoueurReseau*>(*it);
  2. if (jj && jj->getAdresse()!=NULL)
  3.      sendto(socketUDP,&paq,sizeof(paq),0,jj->getAdresse(),sizeof(*jj->getAdresse()));


Client:

Code :
  1. int i=select(socketMax+1, &desc, NULL, NULL, &t);
  2. if (i>0)
  3. {
  4.     if (FD_ISSET(socketUDP,&desc))
  5.     {
  6.         PaquetUDP i;
  7.         enCours=buffer;
  8.         struct sockaddr_in from;
  9.         socklen_t a;
  10.         while (enCours < buffer+sizeof(PaquetUDP))
  11.         {
  12.              int lala= recvfrom(socketUDP,enCours,
  13.                                sizeof(PaquetUDP)-(enCours-buffer),
  14.                                0,&from,&a);
  15.              if (lala<0)
  16.              {
  17.                    std::cerr<<"Erreur de connexion udp "<<errno<<" "<<lala<<std::endl;
  18.                    break;
  19.              }
  20.              enCours+=lala;
  21.         }


Message édité par ptitchep le 01-09-2008 à 11:16:55

---------------
deluser --remove-home ptitchep
Reply

Marsh Posté le 31-08-2008 à 18:59:03   

Reply

Marsh Posté le 31-08-2008 à 21:41:49    

As tu pensé à initialiser du coté de ton client windows la pile TCP-IP avec WSAStartup() ?
 
Teste la valeur de retour avec WSAGetLastError() pour voir s'il trouve une erreur.
 
http://msdn.microsoft.com/en-us/li [...] S.85).aspx

Reply

Marsh Posté le 01-09-2008 à 10:26:03    

Oui j'ai bien initialisé.
Je vais regarder du côté de WSAGetLastError.
Merci
 
 
Bon j'ai trouvé grâce à WSAGetLastError ;)
En fait l'initialisation du dernier paramètre de recvfrom était passé à la trappe. Apparemment, ce n'est pas nécessaire sous linux et donc j'ai dû le supprimer en pensant que ça ne servait à rien vu que je bosse rarement sous windows...

Code :
  1. sockaddr_in from;
  2. socklen_t a=sizeof(struct sockaddr_in);
  3. int lala=0;
  4. while (lala < int(sizeof(PaquetUDP)))
  5. {
  6.         lala+= UDPRead(socketUDP,buffer+lala,
  7.                        sizeof(PaquetUDP)-lala,
  8.                        0,&from,&a);
  9.         if (lala<0)
  10.         {
  11.               std::cerr<<"Erreur de connexion udp "<<std::endl;
  12.               serveur->quit();
  13.               return;
  14.         }
  15. }


Message édité par ptitchep le 01-09-2008 à 10:56:52

---------------
deluser --remove-home ptitchep
Reply

Sujets relatifs:

Leave a Replay

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