c#应用程序根本不接收UDP数据

本文关键字:UDP 数据 应用程序 | 更新日期: 2023-09-27 18:17:04

我试图做一些非常简单的事情,不工作:与我的c#应用程序,我只是想监听特定端口上的UDP包。使用Wireshark,我可以很好地看到我想要的包被完美地接收(CRC和一切正常)。

然而,我在网上找到的代码都不起作用。例如,下面这个也失败了:

    private  void ReceiveAsync()
    {
        UdpClient Client = new UdpClient(new IPEndPoint(IPAddress.Any, 51200));
        try
        {
            Client.BeginReceive(new AsyncCallback(OnReceive), null);
        }
        catch (Exception e)
        {
            System.Windows.Forms.MessageBox.Show(e.Message);
        }
    }
    private static void OnReceive(IAsyncResult result)
    {
        System.Windows.Forms.MessageBox.Show("Simply to tell you that something was received on the port");
    }

安装了两个以太网卡。也许这是个问题?但即使我指定了IP地址,也不会改变任何东西。

            UdpClient Client = new UdpClient(new IPEndPoint(IPAddress.Parse("10.0.0.2"), 51200));
我很乐意听到任何能解决这个问题的想法。非常感谢!

c#应用程序根本不接收UDP数据

代码很好,我已经测试过了。

需要等待接收数据,Client对象只存在于ReceiveAsync

尝试添加Thread.Sleep(10000)

编辑:


Thread.Sleep(1000)不是很好的做法,因为它阻塞了线程。
这取决于你要解决的问题/情况。你可能有某种TCP引擎来处理多个连接,或者数据处理,所以你可以把数据放在缓冲区,让其他线程来处理。

如果你能分享你想要解决的问题,也许你能给出更好的答案也可以看到来自MSDN - UdpClient的代码示例。BeginReceive

我在这里找到了这个线程

使用udpClient连续接收消息

也许这有帮助。

  1. 你真的不应该显示一个消息框,而应该考虑一个调试输出。
  2. 接收后直接保存输入,避免阻塞网络