【发布时间】:2010-11-12 11:12:19
【问题描述】:
我正在使用 .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 地址),我什么也得不到。现在,如果我在与服务器相同的电脑上运行客户端,我可以使用这两个选项接收消息。
我不确定我做错了什么,或者是否有某种防火墙阻止了 LAN 上的 UDP 消息。有什么想法吗?
谢谢,
克雷格
【问题讨论】:
-
Craig:如果您使用的是 VB.NET,也许它会起作用?
-
您可以做的一件事是检查数据包是否从网络上传出,以了解它是客户端问题还是服务器问题。安装网络监视器,如wireshark 并监视您的局域网。
-
是的,但这不适用于 C#。克雷格是这么说的。
-
John,C#/VB.NET cmets 是怎么回事?有问题吗?