0

我正在打开一个 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);
    }

发生这种情况时,我被卡住了,重新启动应用程序无济于事。我需要重新启动机器才能让回调重新开始工作。

我不知道从这里去哪里或如何解决这个问题。

任何想法发生了什么?

4

1 回答 1

0

最后我们无法解决这个问题。它不限于异步 IO 或完成端口。最后,我们采取了使用 PcapDotNet 直接拾取数据包的步骤,这很有效。

于 2013-09-26T07:59:26.620 回答