3
我正在發送一個UDP多播消息來查找網絡上的某些設備。然後我偵聽端口的響應5001UDP - 發送多播消息並偵聽響應給出SocketException
我的工作流程如下:
- 發送組播「發現」的消息對本地子網。
- 上,我希望有一個信息包中的網絡響應的任何wiznet設備接收
這一切都可以在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;
}
**更新**
所以我已經試過結構的各種方式的代碼。看來這個問題與在不同的UdpClient上發送和接收有關。我的例外是由於創建一個UdpClient在打開發送之後立即收到 - 在發送和接收之間添加一個延遲來解決這個問題。
我已經改變了我的代碼使用相同的UdpClient發送和接收,但我仍然沒有得到任何東西的接收。
顯然已經有一個綁定到端口5001的套接字。這可能是一個已經運行的應用程序,或者您自己的代碼。仔細檢查你是不是將多個套接字綁定到同一個端口,然後嘗試是否有其他端口工作。 – dtb 2011-06-07 09:31:51
我可能會錯過某些明顯的東西,但我相當肯定這不是問題。我沒有其他任何綁定到端口5001,並且代碼在xp上工作。也有嘗試過這樣的「乾淨」的Windows 7機器沒有喜悅 – 2011-06-07 09:38:19
實際上,這並不是拋出異常的地方,而是發生異常的地方!在此之前拋出異常,可能是通過調用「UdpClient」構造函數,或者調用「BeginReceive」。你能告訴我們哪個? – 2011-06-07 09:40:04