HighTechTalks DotNet Forums  

UdpClient Stop Receiving Broadcast Datagram On Lan When Connect to Internet

Dotnet Framework (Remoting) microsoft.public.dotnet.framework.remoting


Discuss UdpClient Stop Receiving Broadcast Datagram On Lan When Connect to Internet in the Dotnet Framework (Remoting) forum.



Reply
 
Thread Tools Search this Thread Display Modes
  #1  
Old   
greenxiar
 
Posts: n/a

Default UdpClient Stop Receiving Broadcast Datagram On Lan When Connect to Internet - 03-25-2007 , 12:35 AM






My code is below and the platform is Win2K3 R2:

using System;
using System.Net;
using System.Net.Sockets;
using System.Threading;

namespace TechUDPBroadcast {
class Program {
static void Main(string[] args) {
const string addr = "224.1.3.99";
const int prt = 12799;

UdpClient udpc = new UdpClient();
udpc.Client.SetSocketOption(SocketOptionLevel.Sock et,
SocketOptionName.ReuseAddress, true);
udpc.Client.Bind(new IPEndPoint(IPAddress.Any, prt));
udpc.EnableBroadcast = true;

udpc.JoinMulticastGroup(IPAddress.Parse(addr));

ManualResetEvent abort = new ManualResetEvent(false);
WaitHandle[] evs = new WaitHandle[2];
evs[0] = abort;
ThreadPool.QueueUserWorkItem(new WaitCallback(delegate {
while (true) {
IAsyncResult asy = udpc.BeginReceive(
new AsyncCallback(delegate(IAsyncResult iasy) {
IPEndPoint rp = null;
byte[] recv = udpc.EndReceive(iasy, ref rp);
Console.Write(".");
}), null);
evs[1] = asy.AsyncWaitHandle;
if (WaitHandle.WaitAny(evs) == 0) return;
}
}));
ThreadPool.QueueUserWorkItem(new WaitCallback(delegate {
for (int i = 0; i < 1000; i++) {
udpc.Send(new byte[] { 0x1, 0x2 }, 2,
new IPEndPoint(IPAddress.Parse(addr), prt));
Console.Write("+");
Thread.Sleep(1000);
if (abort.WaitOne(0, false)) return;
}
}));
Console.ReadKey();
Abort.Set();
}
}
}

The code is simple and has no tricky. UdpClient broadcast
datagram every second, another thread receive it asynchorously.
When it is running at LAN, sending & receiving are OK.
Then i connect the PC to Internet, the UdpClient stop receiving!
This happened with or without Windows FireWall.

Is this a bug of DotNetFramework?

greenxiar



Reply With Quote
  #2  
Old   
greenxiar
 
Posts: n/a

Default Re: UdpClient Stop Receiving Broadcast Datagram On Lan When Connect to Internet - 04-01-2007 , 01:09 AM






Sorry. two line cause the problem

udpc.Client.Bind(new IPEndPoint(IPAddress.Any, prt));
udpc.JoinMulticastGroup(IPAddress.Parse(addr));

The UdpClient can only receive and send multicast datagrams
to only "ONE" binded IPAddress. If there are more than
one network connection as PPPOE or second NIC,
you will not sure which IPAddress is sending or listening.

So the answer is

udpc.Client.Bind(new IPEndPoint([localAddress], [localPort]));
udpc.JoinMulticastGroup(IPAddress.Parse([multicastAddress]),
[localAddress]);



Reply With Quote
Reply




Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off



Powered by vBulletin Version 3.5.4
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.