我需要一些C#(一台服务器和一个客户端)例程,它允许我从PC上找到连接到子网的(WinCE)设备。尽管测试了几个例子,但我无法使广播工作。广播没有到达主机
运行在设备上有C#(Compact框架)基于服务器,其代码如下所示:
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),它将被服务器接收。但是这样,我失去了主要的目标,那就是找到我以前不知道的设备。
如果您在服务器上运行一个数据包捕获,你看到你的任何产生的广播流量的? (而且,更重要的是,我认为客户端和服务器在同一个逻辑网络上?) – admdrew
您的客户端是否在Windows 7上运行? – OnoSendai
从不调用AsyncCallback(在代码“someMethod”中调用)。如果有数据出现,它应该被调用。在这种情况下,PC和WinCE设备通过以太网连接到同一交换机。 – Ferite