我需要几个C#(一个服务器和一个客户端)例程,允许我从PC上找到连接到子网的(WinCE)设备。尽管测试了几个例子,但我无法使广播起作用。
在设备上运行的是基于C#(Compact framework)的服务器,其代码如下所示:
public void SomeClass()
{
IPEndPoint ipUDP = new IPEndPoint(IPAddress.Any, 5003);
this.serverUDP = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
this.serverUDP.Bind(ipUDP);
IPEndPoint sender = new IPEndPoint(IPAddress.Any, 6001);
this.epSender = (EndPoint)sender;
this.serverUDP.BeginReceiveFrom(this.bufferUDP, 0, 20, SocketFlags.None, ref epSender, new AsyncCallback(someMethod), null);
}
在PC中,我运行的客户端应该使用广播消息调用这些服务器:
public static void Discover(ref string mensaje, string IPDestino, ref ArrayList equipos)
{
UdpClient client = null;
try
{
client = new UdpClient(6001);
byte[] toSend = Encoding.ASCII.GetBytes("FINDSTT");
client.Send(toSend, toSend.Length, "255.255.255.255", 5003);
//Some logic
}
catch (Exception ex)
{
//Some handling
}
if (client != null)
client.Close();
}
问题是广播从未到达服务器。但是,如果我在client.Send()中更改特定地址的广播地址(255.255.255.255),则由服务器接收。但是这样,我失去了主要目标,那就是找到事先不知道的设备。
答案 0 :(得分:0)
如果您的客户端在Windows 7/8下运行,问题可能在于操作系统处理零网络广播地址 255.255.255.255
的方式。
如果是这种情况,那么this post may be of some help to you。
另外,相关:
How to fix the global broadcast address (255.255.255.255) behavior on Windows?(Technet,Win7)
IPv4 broadcast problem(win8)