Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3032 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Communication UDP [Résolu]

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Communication UDP [Résolu]

n°1780589
ptitchep
Posté le 31-08-2008 à 18:59:03  profilanswer
 

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
mood
Publicité
Posté le 31-08-2008 à 18:59:03  profilanswer
 

n°1780710
xilebo
noone
Posté le 31-08-2008 à 21:41:49  profilanswer
 

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

n°1780843
ptitchep
Posté le 01-09-2008 à 10:26:03  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Communication UDP [Résolu]

 

Sujets relatifs
[Resolu][RegExp] filtre sur code postalScript bash - Problème d'espace dans une variable RESOLU
[Résolu][PHP] utf8_decode et accent en dernière position ?!Ecriture d'un nombre [RESOLU]
[Résolu][VBA-Excel]Problème d'affichage de feuille[RESOLU] Tri + somme pour une colonne
[RESOLU] Visual C++ 6.0 : Plantage à la compilationCpie de fichier [RESOLU]
[resolu]souci dans mon code php.. 
Plus de sujets relatifs à : Communication UDP [Résolu]


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR