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

时间:2013-06-04 13:41:16

标签: c# udp ethernet

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

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

2 个答案:

答案 0 :(得分:2)

代码很好并且正常 - 我已经测试过了。

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

尝试添加Thread.Sleep(10000)

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

如果你分享你试图解决的问题,也许可以给出更好的答案 也可以看到MSDN - UdpClient.BeginReceive

中的代码示例

答案 1 :(得分:0)

我在这里找到了这个帖子

Receive messages continuously using udpClient

可能会有所帮助。

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