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

  FORUM HardWare.fr
  Programmation
  C++

  [C/C++]Socket UDP ouvrir fermer une socket vite

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C/C++]Socket UDP ouvrir fermer une socket vite

n°367034
CtHuLhU50
Posté le 19-04-2003 à 08:13:05  profilanswer
 

salut a tous !
Voila j'essaye d envoye un message a mes 2 PC en rezo enfain faire un prog tt con ki se connecter en UDP é ki envoye un message aux 2 PC mais seulement 1 PC recoit le message .
 
voici le source :

Code :
  1. #include <stdio.h>
  2. #include <winsock2.h>
  3. #include <windows.h>
  4. #pragma comment(lib, "ws2_32.lib" )
  5. void main(void)
  6. {
  7. SOCKET c;
  8. SOCKADDR_IN to;
  9. WSADATA wsa;
  10. WORD v;
  11. int i;
  12. char buf[] = "test test";
  13. //Windows socket init//
  14. v = MAKEWORD(2, 0);
  15. if(WSAStartup(v, &wsa) != 0)
  16.  exit(EXIT_FAILURE);
  17. ///////////////////////
  18. //Socket//
  19. c = socket(AF_INET, SOCK_DGRAM, 0);
  20. to.sin_family = AF_INET;
  21. to.sin_addr.s_addr = inet_addr("192.168.0.1" );
  22. to.sin_port = htons(1989);
  23. sendto(c, buf, sizeof(buf), 0, (LPSOCKADDR)&to, sizeof(to));
  24. closesocket(c);
  25. WSACleanup();
  26. c = socket(AF_INET, SOCK_DGRAM, 0);
  27. to.sin_family = AF_INET;
  28. to.sin_addr.s_addr = inet_addr("192.168.0.2" );
  29. to.sin_port = htons(1989);
  30. sendto(c, buf, sizeof(buf), 0, (LPSOCKADDR)&to, sizeof(to));
  31. closesocket(c);
  32. WSACleanup();
  33. return;
  34. }


 
je pense ke cela et du a la rapidité ke la socket n as pas le temps de se fermer pour apres se réouvrir !
 
merci a +++

mood
Publicité
Posté le 19-04-2003 à 08:13:05  profilanswer
 

n°367038
gilou
Modérateur
Modzilla
Posté le 19-04-2003 à 09:15:54  profilanswer
 

Le premier WSACleanup(); ne serait pas en trop?? ou alors, il faudrait pas que tu refasses un appel a WSAStartup(...) apres??
Ca me semble sauter aux yeux, en lisant ton code.
 
A+,


Message édité par gilou le 19-04-2003 à 09:26:59

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°367041
CtHuLhU50
Posté le 19-04-2003 à 09:30:38  profilanswer
 

ca change kedal :(

n°367045
gilou
Modérateur
Modzilla
Posté le 19-04-2003 à 09:55:59  profilanswer
 

Si ceci fonctionne:
 

Code :
  1. #include <stdio.h>
  2. #include <winsock2.h>
  3. #include <windows.h>
  4. #pragma comment(lib, "ws2_32.lib" )
  5. void main(void)
  6. {
  7. SOCKET c,c1;
  8. SOCKADDR_IN to, to1;
  9. WSADATA wsa;
  10. WORD v;
  11. int i;
  12. char buf[] = "test test";
  13. //Windows socket init//  
  14. v = MAKEWORD(2, 0);
  15. if(WSAStartup(v, &wsa) != 0)
  16. exit(EXIT_FAILURE);
  17. ///////////////////////  
  18. //Socket//  
  19. c = socket(AF_INET, SOCK_DGRAM, 0);
  20. c1 = socket(AF_INET, SOCK_DGRAM, 0);
  21. to.sin_family = AF_INET;
  22. to1.sin_family = AF_INET;
  23. to.sin_addr.s_addr = inet_addr("192.168.0.1" );
  24. to1.sin_addr.s_addr = inet_addr("192.168.0.2" );
  25. to.sin_port = htons(1989);
  26. to1.sin_port = htons(1989);
  27. sendto(c, buf, sizeof(buf), 0, (LPSOCKADDR)&to, sizeof(to));
  28. sendto(c1, buf, sizeof(buf), 0, (LPSOCKADDR)&to1, sizeof(to1));
  29. closesocket(c);
  30. closesocket(c1);
  31. WSACleanup();
  32. return;
  33. }

 
Alors, ca peut en effet etre du a un réemploi de la socket ou de la structure SOCK_ADDR, avant qu'elle ait fini d'envoyer ce qu'elle a a envoyer (auquel cas, ce devrait etre ta 2e machine seulement qui devrait recevoir correctement le message). Essayes alors de tenir compte d'un parametre SO_LINGER dans les options de la socket.
 
De toute façon, les codes d'erreurs de sendto dans ton source initial devraient permettre de savoir ou est le pb, une fois décriptés avec WSAGetLastError.  
 
A+,


Message édité par gilou le 19-04-2003 à 10:33:38

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°367048
mrbebert
Posté le 19-04-2003 à 10:03:04  profilanswer
 

CtHuLhU50 a écrit :

salut a tous !
Voila j'essaye d envoye un message a mes 2 PC en rezo enfain faire un prog tt con ki se connecter en UDP é ki envoye un message aux 2 PC mais seulement 1 PC recoit le message .

Y a une contradiction, là [:figti] :D  
 
Sinon, je me demande si tu peux pas utiliser la même socket pour les 2 envois. Puisqu'il n'y a pas de notion de connexion en UDP.
 
Mais de toute façon, avec UDP, rien ne garantit que ce que tu envoies arrive correctement [:proy]


Message édité par mrbebert le 19-04-2003 à 10:03:19
n°367102
Konar
Posté le 19-04-2003 à 12:31:13  profilanswer
 

essayes de mettre tout le code d'envoi (de //Windows socket init jusqu'au 1er WSACleanup) dans un thread, que tu appeleras 2 fois avec comme parametre l'IP de chaque machine dans le main, avec un wait pour attendre la fin des 2 threads.
 
ca complique bien le tout, donc c'est mieux.
tu peux aussi faire une fonction a la place d'un thread, mais c'est moins marrant.

n°367104
CtHuLhU50
Posté le 19-04-2003 à 12:36:35  profilanswer
 

C bon j'ai trouvé mon erreur merci les gars :)

n°367179
gilou
Modérateur
Modzilla
Posté le 19-04-2003 à 15:23:37  profilanswer
 

CtHuLhU50 a écrit :

C bon j'ai trouvé mon erreur merci les gars :)


Et si tu nous disais ce que c'etait? ca ne mange pas de pain.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°367195
CtHuLhU50
Posté le 19-04-2003 à 16:03:02  profilanswer
 

ben enfaite g pas totalement trouvé car les udp marche k avec l'ip 127.0.0.1 l ' ip local ....
 
par example kand je fé ca :
c = socket(AF_INET, SOCK_DGRAM, 0);
     to.sin_family = AF_INET;
     to.sin_addr.s_addr = inet_addr("192.168.0.2" );
     to.sin_port = htons(1989);
 
avec 192.168.0.2 c'est l'ip de ma carte rezo sur mon PC ca ne marche pas ....


Message édité par CtHuLhU50 le 19-04-2003 à 16:05:04
n°367206
CtHuLhU50
Posté le 19-04-2003 à 16:12:58  profilanswer
 

voila g trouvé ca venait de mon server erfff


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

  [C/C++]Socket UDP ouvrir fermer une socket vite

 

Sujets relatifs
[html / asp ? ] Ouvrir un fichier local ou distant... comment ?Sockets windows -> impossible de créer une socket!
VITE HELPpppp !!!!!!!!!!!![HTML, JS] Ouvrir une page sans menu et autre
Question con : ouvrir ou fermer une boite de dialogue en mfc ??[C++] Regler le timeout d'un connect (création d une Socket) URGENT
Ouvrir/fermer l'ensemble des noeuds[C, C++]Socket non bloquante, pleaaasee help
Plus de sujets relatifs à : [C/C++]Socket UDP ouvrir fermer une socket vite


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