1

我正在尝试做一些非常简单但不起作用的事情:使用我的 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));

我会很高兴有任何可以解决这个问题的想法。非常感谢!

4

2 回答 2

2

代码很好并且可以工作 - 我已经测试过了。

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

尝试添加Thread.Sleep(10000)

编辑:
Thread.Sleep(1000) 不是好习惯,因为它阻塞了线程。
这取决于您要解决的问题/案例。您可能有某种处理多个连接或数据处理的 TCP 引擎,因此您可以说缓冲区中的数据供其他线程处理。

如果您分享您正在尝试解决的问题,也许可以给出更好的答案也可以看到来自MSDN 的代码示例 - UdpClient.BeginReceive

于 2013-06-04T14:02:01.317 回答
0

我在这里找到了这个线程

使用 udpClient 连续接收消息

可能这有帮助。

  1. 您真的不应该显示消息框,请考虑调试输出。
  2. 收到后直接保存输入,避免网络阻塞。
于 2013-06-04T14:17:27.633 回答