我正在打开一个 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);
}
发生这种情况时,我被卡住了,重新启动应用程序无济于事。我需要重新启动机器才能让回调重新开始工作。
我不知道从这里去哪里或如何解决这个问题。
任何想法发生了什么?