1

我正在使用 .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 上运行)上收到了很好的消息。但是,如果我选择第一个或第二个单选按钮(创建广播或 255.255.255.255 作为 IP 地址),我什么也得不到。现在,如果我在与服务器相同的电脑上运行客户端,我可以使用这两个选项接收消息。

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

谢谢,

克雷格

4

7 回答 7

4

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

于 2009-07-20T21:36:22.220 回答
1

我有类似的问题,我在这里看到的所有代码似乎都没有工作。当我启动我的程序时,会弹出这个防火墙窗口,告诉你防火墙已经阻止了一些功能。

我的问题是我点击了允许访问而没有勾选“私人网络,就像我的家庭或工作网络一样糟糕”的复选框。您当然可以稍后在防火墙设置中更改此设置并勾选该复选框。de 服务器和另一台机器都必须选中该复选框。或者至少这就是我的工作的原因。

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

于 2015-04-14T04:43:25.977 回答
1

客户端和服务器在同一个物理网络上吗?如果没有,您将无法进行本地广播 (255.255.255.255),需要进行定向子网广播。您必须先启用路由器以允许定向子网广播 (172.16.75.255),然后才能正常工作。

于 2009-07-20T22:00:25.650 回答
0

Craig, I develop a C# udp client/server tool, using broadcasts, it works ( datagrams are received by all the clients on the same subnet ). Just avoid 255.255.255.255, windows cannot always take the right route. You have to help windows specifying the right subnet. Server : bind the udp socket to 172.16.75.15, and sendto the local broadcast address ( are you sure about 172.16.75.255 ? check your subnet mask ).

于 2013-07-24T00:47:05.057 回答
0

我刚刚尝试了您的代码并为我工作。我唯一更改的是 IPAddress 以匹配我的服务器本地 IP 地址。

于 2012-03-05T20:54:08.103 回答
0

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

于 2009-07-20T21:57:35.467 回答
0

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

于 2020-10-07T12:15:19.397 回答