C#UDP广播客户端/服务器不起作用

时间:2009-07-20 21:30:17

标签: c# sockets udp broadcast

我正在使用.NET 2.0并创建了一个相当简单的udp广播应用和UDP侦听器。

听众代码:

Socket listener = new Socket( AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp );
IPEndPoint localEndPoint = new IPEndPoint( IPAddress.Any, 11000 );
listener.Bind( localEndPoint );
EndPoint ep = (EndPoint)localEndPoint;
Console.WriteLine("Ready to receive…");
byte[] data = new byte[1024];
int recv = listener.ReceiveFrom(data, ref ep);
string stringData = Encoding.ASCII.GetString(data, 0, recv);
Console.WriteLine("received: {0} from: {1}", stringData, ep.ToString());
listener.Close();

服务器代码:

int groupPort = 11000;
IPEndPoint groupEP = new IPEndPoint( IPAddress.Parse( "255.255.255.255" ), groupPort );

if ( radioButton2.Checked )
{
    groupEP = new IPEndPoint( IPAddress.Broadcast, groupPort );
}
    else if ( radioButton3.Checked )
{
    groupEP = new IPEndPoint( IPAddress.Parse( "172.16.75.15" ), groupPort );
}

Socket socket = new Socket( AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp );
socket.SetSocketOption( SocketOptionLevel.Socket, SocketOptionName.Broadcast, 1 );
socket.SendTo( System.Text.ASCIIEncoding.ASCII.GetBytes( testTextBox.Text ), groupEP );

服务器只是一个简单的Windows应用程序,带有3个单选按钮,按钮和文本框。

当我在另一台计算机上运行服务器并选择radioButton3时,我在客户端侦听器(在ip地址172.16.75.15上运行)上收到消息就好了。但是,如果我选择第一个或第二个radiobutton(创建广播或255.255.255.255作为IP地址),我什么也得不到。现在,如果我在与服务器相同的PC上运行客户端,我可以使用这两个选项接收消息。

我不确定我做错了什么,或者是否有某种防火墙阻止了局域网上的UDP消息。有什么想法吗?

谢谢,

克雷格

7 个答案:

答案 0 :(得分:5)

仅在本地子网上尝试广播。 IE如果您的子网是255.255.255.0尝试播放172.16.75.255。可能是Windows,路由器甚至网卡都会自动阻止通用广播作为预防措施。

答案 1 :(得分:0)

只是一个注释,但如果你是从头开始编写一个新的应用程序,那么你应该真正使用多播而不是广播。

答案 2 :(得分:0)

客户端是否与服务器位于同一物理网络中?如果没有,您将无法进行本地广播(255.255.255.255)并需要进行定向子网广播。在此之前,您必须启用路由器以允许定向子网广播(172.16.75.255)。

答案 3 :(得分:0)

我刚试过你的代码并为我工作。我唯一改变的是IPAddress以匹配服务器的本地IP地址。

答案 4 :(得分:0)

Craig,我开发了一个C#udp客户端/服务器工具,使用广播,它工作(数据报由同一子网上的所有客户端接收)。只是avoid 255.255.255.255,窗户不能总是采取正确的路线。您必须帮助窗口指定正确的子网。服务器:将udp套接字绑定到172.16.75.15,并发送到本地广播地址(你确定172.16.75.255吗?检查子网掩码)。

答案 5 :(得分:0)

我遇到了类似的问题,在我看到的所有代码中似乎没有任何效果。 当我启动我的程序时,会弹出这个防火墙窗口,告诉你防火墙阻止了某些功能。

我的问题是我点击了允许访问而没有勾选“#34;专用网络,作为我的家庭或工作网络"”的复选框。您可以在防火墙设置中稍后更改此选项并勾选该复选框。服务器和其他计算机都必须选中该复选框。或者至少是我的矿井工作的原因。

此外,我必须将我的广播IP地址更改为例如192.168.1.255。我的路由器确实阻止了我的书224.0.0.0 - 239.255.255.255;

的推荐

答案 6 :(得分:0)

在我的情况下,由于Teamviewer VPN驱动程序255.255.255.255在网络连接中不起作用。我之所以使用子网掩码,是因为我必须找到设备而不是静态IP,因为DHCP经常更改IP。