我正在发送UDP多播消息以查找网络上的某些设备。然后我在端口5001上听取响应。
我的工作流程如下:
在Windows XP上一切正常,但在Windows 7上,我得到SocketException类型的异常:*
击>通常只允许使用每个套接字地址(协议/网络地址/端口)
<击> 撞击>
我可以在Wireshark看到多播消息,我看到设备的响应,但我的代码没有响应。我的代码如下所示:
public void StartListen()
{
SendFind();
try {
IPEndPoint localEp = new IPEndPoint(IPAddress.Any, 0);
UdpClient listenClient = new UdpClient(5001);
UdpState s = new UdpState();
s.endpoint = localEp;
s.client = listenClient;
//allow time for the find to work - aka clutching at straws
Thread.Sleep(500);
while (listenClient.Available > 0)
{
listenClient.BeginReceive(ReceiveCallback, s);
Thread.Sleep(500);
}
}
catch (SocketException e)
{
Trace.WriteLine("Could not bind to socket on " + _localPort);
}
listenClient.Close();
}
..和RecieveCallBack ..
private void ReceiveCallback(IAsyncResult ar)
{
UdpClient u = (UdpClient)((UdpState)(ar.AsyncState)).client;
IPEndPoint e = (IPEndPoint)((UdpState)(ar.AsyncState)).endpoint;
Byte[] receiveBytes = u.EndReceive(ar, ref e);
rxByteList.Add(receiveBytes);
messageRxed = true;
}
**更新**
所以我尝试了各种构造此代码的方法。似乎问题与在不同的UdpClients上发送和接收有关。我的例外是由于创建一个UdpClient在打开一个发送后立即收到 - 在发送和接收之间添加一个延迟修复了这个。
我已将我的代码更改为使用相同的UdpClient进行发送和接收,但我仍然没有收到任何内容。
答案 0 :(得分:2)
排序!这是因为我的Sendpacket使用了“udpclient.connect”,它将接收限制为提供给connect方法的端点中的所有数据。