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

  FORUM HardWare.fr
  Programmation
  C++

  [C/C++]comment savoir si un port UDP et ouvert sur une machine ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C/C++]comment savoir si un port UDP et ouvert sur une machine ?

n°369715
CtHuLhU50
Posté le 23-04-2003 à 17:26:29  profilanswer
 

Salut a tous,
voila j'aurais voulu savoir s'il est possbile de savoir si un port UDP est ouvert sur une machine.Car en UDP il n'y a pas de connection ...
 
s=sendto(c, buf, sizeof(buf), 0, (LPSOCKADDR)&to, sizeof(to));
if(s == 0 || s == SOCKET_ERROR)
printf("erreur" );
 
ke le port soi ouvert ou non le je n'ai jamais erreur dans la console.
 
quelqu'un a une idée ?,merci

mood
Publicité
Posté le 23-04-2003 à 17:26:29  profilanswer
 

n°369786
Deaddy
Posté le 23-04-2003 à 18:39:06  profilanswer
 

bah en fait, c l'un des interets de l'UDP: qu'il y ait quelqu'un ou pas à l'autre bout, l'emeteur n'est pas affecté (ne recoit pas d'erreur)
 
pour savoir si le destinataire recoit qq chose, il doit te renvoyer explicitement une info pour te le dire.

n°369821
CtHuLhU50
Posté le 23-04-2003 à 19:55:31  profilanswer
 

ouaip ben c 'est bien ce ki é con
car pour recevoir un message c la commande recvfrom et elle reste bloké tant k'il n'y a pas de message !
 
car moi enfaite g une liste d'ip et je doit regarder tte les 20 seconde s'il le port 1002 en UDP et ouvert, pour sela je leur send ping et les ip en question doivent me repondre pong, mais si il y a une ip ou le port 1002 est pas ouvert je pong je pe tjr l'attendre est donc paff mon programme est bloké !

n°370055
Deaddy
Posté le 24-04-2003 à 00:31:34  profilanswer
 

tu peux t'en sortir grace à la fonction select() qui accepte un timeout. pour en savoir plus, ya un ancien post concernant le tcp/ip non-bloquant (valable aussi pour l'udp)
 
"TCP-IP Pb recv bloquant et terminaison de processus" initié par xilebo


Message édité par Deaddy le 24-04-2003 à 00:33:58
n°370153
CtHuLhU50
Posté le 24-04-2003 à 09:49:19  profilanswer
 

dsl mais j'ai absolument rien capter au post de xilebo !
 
je cherche un truc simple moi :)
 

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 sizePeerAddr = sizeof(to);
  12. char ip[50];
  13. char buf[] = "ping";
  14. char rec[1024];
  15. int r,s;
  16. //Socket//
  17. v = MAKEWORD(2, 0);
  18. if(WSAStartup(v, &wsa) != 0)
  19. exit(EXIT_FAILURE);
  20. ///////////////////////
  21. do
  22. {
  23. scanf("%s",ip);
  24. c = socket(AF_INET, SOCK_DGRAM, 0);
  25. to.sin_family = AF_INET;
  26. to.sin_addr.s_addr = inet_addr(ip);
  27. to.sin_port = htons(1002);
  28. s= sendto(c, buf, sizeof(buf), 0, (LPSOCKADDR)&to, sizeof(to));
  29. if(s == 0 || s == SOCKET_ERROR) printf("pas de connection\n" );
  30. if(s > 0) printf("message envoye avec succes\n" );
  31. r = recvfrom(c, rec, sizeof(rec), 0, (LPSOCKADDR)&to, &sizePeerAddr);
  32. if(r == 0 || r == SOCKET_ERROR) printf("pas de connection\n" );
  33. if(r > 0) printf("message recu avec succes\n" );
  34. closesocket(c);
  35. } while (1);
  36. WSACleanup();
  37. }


 
avec ce source la comment je fais pour inséré un timeout au recvfrom ?
 
merci !

n°370461
CtHuLhU50
Posté le 24-04-2003 à 14:42:33  profilanswer
 

:bounce: please

n°371288
Deaddy
Posté le 25-04-2003 à 00:55:42  profilanswer
 

Code :
  1. #include <stdio.h>
  2. #include <winsock2.h>
  3. #include <windows.h>
  4. #pragma comment(lib, "wsock32.lib" )
  5. void main(void)
  6. {
  7. SOCKET c;
  8. SOCKADDR_IN to,here;
  9. WSADATA wsa;
  10. WORD v;
  11. int sizePeerAddr = sizeof(to);
  12. char ip[50];
  13. char buf[] = "ping";
  14. char rec[1024];
  15. int r,s;
  16. fd_set f;
  17. struct timeval ti;
  18. /*Socket*/
  19. v = MAKEWORD(2, 0);
  20. if(WSAStartup(v, &wsa) != 0) exit(EXIT_FAILURE);
  21. c = socket(AF_INET, SOCK_DGRAM, 0);
  22. here.sin_addr.s_addr=INADDR_ANY;
  23. here.sin_port=htons(/*a toi de voir*/);
  24. here.sin_family=to.sin_family = AF_INET;
  25. to.sin_port = htons(1002);
  26. if (bind(s,(sockaddr*)&here,sizeof(here))<0) { perror("bind" );exit(-1);}
  27. ti.tv_sec=1; // 1 seconde
  28. do
  29. {
  30.  scanf("%s",ip);
  31.  to.sin_addr.s_addr = inet_addr(ip);
  32.  s= sendto(c, buf, sizeof(buf), 0, (LPSOCKADDR)&to, sizeof(to));
  33.  printf("%d octets envoyés\n",s);
  34.  FD_ZERO(&f);
  35.  FD_SET(c,&f);
  36.  if (select(FD_SETSIZE,&f,NULL,NULL,&ti))
  37.  {
  38.   r = recvfrom(c, rec, sizeof(rec), 0, (LPSOCKADDR)&to, &sizePeerAddr);
  39.   printf("%d octets recus\n",r);
  40.  }
  41.  else pritnf("TIMEOUT\n" );
  42. } while (1);
  43. closesocket(c);
  44. WSACleanup();
  45. }

 
 
(j'ai rien testé)

n°371722
Ace17
Posté le 25-04-2003 à 12:48:14  profilanswer
 

CtHuLhU50 a écrit :


car pour recevoir un message c la commande recvfrom et elle reste bloké tant k'il n'y a pas de message !


 
Utilise un thread auxiliaire

n°372910
CtHuLhU50
Posté le 26-04-2003 à 23:41:07  profilanswer
 

comment k'on fé un thread auxiliaire :) !

n°373253
Ace17
Posté le 27-04-2003 à 14:42:41  profilanswer
 

Tu utilises la fonction CreateThread  ( tu sais ce que c'est un thread au fait? ) dont le mode d'emploi est détaillé dans la msdn

mood
Publicité
Posté le 27-04-2003 à 14:42:41  profilanswer
 

n°377903
xWillow
Posté le 30-04-2003 à 11:49:00  profilanswer
 

http://www.manualy.sk/sock-faq/unix-socket-faq-6.html
pour faire une socket non bloquante
 
c'est pour unix mais la fonction marche pareil que sous windows


Message édité par xWillow le 30-04-2003 à 11:49:47

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

  [C/C++]comment savoir si un port UDP et ouvert sur une machine ?

 

Sujets relatifs
[C/C++]Socket UDP ouvrir fermer une socket viteread port COM non bloquant sous win :-( comment faire ?
gradateur sur port paralléle[java] Trouver l'adresse IP web de sa machine
lancer un programme sur la machine client[HTML] Pb Gestionnaire d'évènements selon la machine ...
Lancer un proces sur une machine distante[visual C++] Savoir si un programme est lancé (WinNT)
Enregistrement ActiveX: possible dans LOCAL_MACHINE ??Peut on checker un port s'il est ouvert ou nom??
Plus de sujets relatifs à : [C/C++]comment savoir si un port UDP et ouvert sur une machine ?


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