J'essaye actuellement de recevoir des r=E9ponses =E0 un broadcast UDP que
j'ai envoy=E9 et je parviens pas =E0 faire fonctionner =E7a. Je vois bien
avec WireShark que le datagramme est envoy=E9 et que les r=E9ponses
arrivent, mais mon code C# ne voit pas les r=E9ponses.
Voici comment j'ai cod=E9 mon test :
Socket socket =3D new Socket(AddressFamily.InterNetwork,
SocketType.Dgram, ProtocolType.Udp);
try
{
// Send data to the broadcast address
IPEndPoint broadcastIEP =3D new IPEndPoint(IPAddress.Broadcast,
port);
socket.Connect(broadcastIEP);
socket.Send(data);
// Wait for someone to respond
for (int i =3D 0; i < 50; i++)
{
int availableBytes =3D socket.Available;
if (availableBytes > 0)
{
byte[] buffer =3D new byte[availableBytes];
socket.Receive(buffer, 0, availableBytes,
SocketFlags.None);
L'id=E9e est d'envoyer un broadcast UDP et d'attendre la premi=E8re
machine qui r=E9pond. L'attente doit s'arr=EAter apr=E8s une dur=E9e
d=E9termin=E9e.
Je dois forc=E9ment faire quelque chose de travers ici, mais je ne vois
pas vraiment ce qui me manque. J'ai essay=E9 "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.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Jérémy Jeanson
De tête je crois qu'il fait mettre ton socket en réception avec "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
De tête je crois qu'il fait mettre ton socket en réception avec
"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
De tête je crois qu'il fait mettre ton socket en réception avec "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
Faust
il te manquerait pas un "Listen" après ton "Send" par hasard ? ;)
/Dans son message précédent, _OBones_ a écrit/ :
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);
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
-- */Teträm/* http://www.tetram.org
"Quand le Troll parle, L'homme avisé l'écoute"
il te manquerait pas un "Listen" après ton "Send" par hasard ? ;)
/Dans son message précédent, _OBones_ a écrit/ :
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);
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.
il te manquerait pas un "Listen" après ton "Send" par hasard ? ;)
/Dans son message précédent, _OBones_ a écrit/ :
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);
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
-- */Teträm/* http://www.tetram.org
"Quand le Troll parle, L'homme avisé l'écoute"
Jérémy Jeanson
on est bien d'accord il faut qu'il commence à écouter avant de savoir si quelqu'un est connecté :) -- Jérémy JEANSON MCP http://jeremy.blogdns.net
on est bien d'accord il faut qu'il commence à écouter avant de savoir si
quelqu'un est connecté :)
--
Jérémy JEANSON
MCP
http://jeremy.blogdns.net