我正在打开一个用于接收udp数据包的UDP套接字。但有时它永远不会到达Do stuff with data
点。
正在接收数据,我可以在Wireshark上看到它:
但是当我运行Disconnect代码时,回调只会运行以关闭套接字。
private void OpenUDPSocket()
{
this.processDataSockets.Clear();
IPHostEntry host;
host = Dns.GetHostEntry(Dns.GetHostName());
foreach (IPAddress ip in host.AddressList)
{
UPDData data = new UPDData();
data.Socket = new Socket(ip.AddressFamily, SocketType.Dgram, ProtocolType.Udp);
data.Socket.Bind(new IPEndPoint(ip, 2222));
data.Socket.EnableBroadcast = true;
data.Buffer = new byte[512];
data.Socket.BeginReceive(data.Buffer, 0, 512, SocketFlags.None, this.ReceivedData, data);
this.processDataSockets.Add(data);
}
this.socketOpen = true;
}
private void ReceivedData(IAsyncResult ar)
{
UPDData data;
try
{
data = (UPDData)ar.AsyncState;
data.Socket.EndReceive(ar);
}
catch (ObjectDisposedException)
{
// The connection has been closed
return;
}
//... Do stuff with data
data.Socket.BeginReceive(data.Buffer, 0, 512, SocketFlags.None, this.ReceivedData, data);
}
当发生这种情况时,我会卡住,重新启动应用程序无济于事。我需要重新启动我的机器才能重新开始工作。
我不知道从哪里开始或如何解决这个问题。
任何想法发生了什么?
答案 0 :(得分:0)
最终我们无法解决此问题。它不仅限于异步IO或完成端口。最后,我们采取了使用PcapDotNet直接获取数据包的步骤,这是有效的。