[C] Comment faire un broadcast sur un réseau ?

Comment faire un broadcast sur un réseau ? [C] - C++ - Programmation

Marsh Posté le 22-03-2003 à 15:49:38    

Je voudrai faire un broadcast sur un réseau pour identifier dans serveurs tournant sur un port précis.

Reply

Marsh Posté le 22-03-2003 à 15:49:38   

Reply

Marsh Posté le 22-03-2003 à 17:35:51    

J'ai trouvé comment faire :
 

Code :
  1. int on;
  2. int portDiff;
  3. struct sockaddr_in adDiffusion;
  4. unsigned long adDiff;
  5. adDiff = inet_addr(argv[2]);            /* Adresse -> broadcast */
  6. printf("Adresse de broadcast = 0x%lX\n", adDiff);
  7. adDiffusion.sin_addr.s_addr = adDiff;   /* Identificateur de l'hote */
  8. adDiffusion.sin_family = AF_INET;       /* Type de la socket du serveur */
  9. adDiffusion.sin_port = htons(portDiff); /* Port des serveurs */
  10. tailleAd = sizeof(adDiffusion);
  11. /* Met la socket en mode broadcast */
  12. on = 1;
  13. setsockopt(skDesc, SOL_SOCKET, SO_BROADCAST, &on, sizeof(on));
  14. sendto(skDesc, &nbNet, sizeof(long), 0, (struct sockaddr*) &adDiffusion, tailleAd);


 
mais j'ai une autre question :
Une fois que j'ai envoyé une requête en broadcast comment puis je savoir si tous les serveurs ont répondu ?

Reply

Marsh Posté le 22-03-2003 à 21:28:10    

Je suppose qu'ils répondent en t'envoyant un message sur un port précis. Il faudrait que tu crées une socket en lecture qui attend sur ce port.

Reply

Marsh Posté le 23-03-2003 à 09:12:40    

mrBebert a écrit :

Je suppose qu'ils répondent en t'envoyant un message sur un port précis. Il faudrait que tu crées une socket en lecture qui attend sur ce port.


oui, mais comment je saurais que tous les serveurs ont répondu ?
(PS : Je ne connais pas le nb de serveurs)

Reply

Marsh Posté le 23-03-2003 à 17:12:47    

Tu attends pendant un délai déterminé. Et tant pis pour ceux qui n'auront pas répondu suffisamment rapidement [:proy]

Reply

Sujets relatifs:

Leave a Replay

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