Recevoir des réponses à un broadcast UDP
Le
OBones
Bonjour à toutes et tous,
J'essaye actuellement de recevoir des réponses à un broadcast UDP que
j'ai envoyé et je parviens pas à faire fonctionner ça. Je vois bien
avec WireShark que le datagramme est envoyé et que les réponses
arrivent, mais mon code C# ne voit pas les réponses.
Voici comment j'ai codé mon test :
Socket socket = new Socket(AddressFamily.InterNetwork,
SocketType.Dgram, ProtocolType.Udp);
try
{
// Send data to the broadcast address
IPEndPoint broadcastIEP = new IPEndPoint(IPAddress.Broadcast,
port);
socket.Connect(broadcastIEP);
socket.Send(data);
// Wait for someone to respond
for (int i = 0; i < 50; i++)
{
int availableBytes = socket.Available;
if (availableBytes > 0)
{
byte[] buffer = new byte[availableBytes];
socket.Receive(buffer, 0, availableBytes,
SocketFlags.None);
return ASCIIEncoding.ASCII.GetString(buffer);
}
System.Threading.Thread.Sleep(100);
}
return "Nobody replied";
}
finally
{
socket.Close();
}
L'idée est d'envoyer un broadcast UDP et d'attendre la première
machine qui répond. L'attente doit s'arrêter après une durée
déterminée.
Je dois forcément faire quelque chose de travers ici, mais je ne vois
pas vraiment ce qui me manque. J'ai essayé "ReceiveFrom", mais c'est
un appel bloquant et il ne rend jamais la main. Je vois les
datagrammes passer (en utilisant WireShark) mais ReceiveFrom ne rend
pas la main.
Merci pour votre aide
Olivier
J'essaye actuellement de recevoir des réponses à un broadcast UDP que
j'ai envoyé et je parviens pas à faire fonctionner ça. Je vois bien
avec WireShark que le datagramme est envoyé et que les réponses
arrivent, mais mon code C# ne voit pas les réponses.
Voici comment j'ai codé mon test :
Socket socket = new Socket(AddressFamily.InterNetwork,
SocketType.Dgram, ProtocolType.Udp);
try
{
// Send data to the broadcast address
IPEndPoint broadcastIEP = new IPEndPoint(IPAddress.Broadcast,
port);
socket.Connect(broadcastIEP);
socket.Send(data);
// Wait for someone to respond
for (int i = 0; i < 50; i++)
{
int availableBytes = socket.Available;
if (availableBytes > 0)
{
byte[] buffer = new byte[availableBytes];
socket.Receive(buffer, 0, availableBytes,
SocketFlags.None);
return ASCIIEncoding.ASCII.GetString(buffer);
}
System.Threading.Thread.Sleep(100);
}
return "Nobody replied";
}
finally
{
socket.Close();
}
L'idée est d'envoyer un broadcast UDP et d'attendre la première
machine qui répond. L'attente doit s'arrêter après une durée
déterminée.
Je dois forcément faire quelque chose de travers ici, mais je ne vois
pas vraiment ce qui me manque. J'ai essayé "ReceiveFrom", mais c'est
un appel bloquant et il ne rend jamais la main. Je vois les
datagrammes passer (en utilisant WireShark) mais ReceiveFrom ne rend
pas la main.
Merci pour votre aide
Olivier

Poser une question


"Receive" avant que "Available" soit utilisable et faire une boucle sur
"Receive" tant que tu reçois des données.
--
Jérémy JEANSON
MCP
http://jeremy.blogdns.net
/Dans son message précédent, _OBones_ a écrit/ :
--
*/Teträm/*
http://www.tetram.org
"Quand le Troll parle,
L'homme avisé l'écoute"
quelqu'un est connecté :)
--
Jérémy JEANSON
MCP
http://jeremy.blogdns.net