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

C#应用程序根本不接收UDP数据,c#,udp,ethernet,C#,Udp,Ethernet,我试图做一些非常简单但不起作用的事情:在我的C#应用程序中,我只想监听特定端口上的UDP包。有了Wireshark,我可以很好地看到我想要的软件包收到的非常好(CRC和一切正常) 然而,我在互联网上找到的代码都不起作用。例如,这一个也失败了: private void ReceiveAsync() { UdpClient Client = new UdpClient(new IPEndPoint(IPAddress.Any, 51200));

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

我很高兴有任何能解决这个问题的想法。多谢各位

代码很好,运行正常-我已经测试过了

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

尝试添加
Thread.Sleep(10000)

编辑:
Thread.Sleep(1000)
不是好的做法,因为它会阻塞线程。
这取决于你试图解决的问题/案例。您可能有某种TCP引擎来处理多个连接或数据处理,这样您就可以说缓冲区中的数据供其他线程使用

如果你和别人分享你想解决的问题,也许你能给出更好的答案
也可以从中看到代码示例,我在这里找到了这个线程

也许这有帮助

  • 实际上,您不应该显示消息框,而应该考虑调试输出
  • 接收后直接保存您的输入,以避免阻塞网络

  • 如果24小时内没有得到回答,我将设置一个悬赏。
    OnReceive
    将不会在UI上下文中调用(它将在线程池线程上运行),因此显示MessageBox可能不可靠。将其替换为Debug.WriteLine并在调试器中运行并重新发布。您调用BeginReceive()但从不调用EndReceive()?我认为您需要在OnReceiveMethod中传递Client对象来调用Client.EndReceive(),因此MSDN示例和您的代码之间存在差异:(最值得注意的是
    UdpState
    )我使用Debug.WriteLine进行了尝试,但仍然没有感谢您对其进行了测试!我让代码作为表单应用程序的一部分运行,因此我不需要让应用程序休眠。因此,我认为您需要将
    客户端
    另存为成员-请参阅我在回答中的评论。现在,我尝试了两个代码版本,当UDP包从另一个应用程序发送时,这两个版本似乎都可以很好地接收UDP包。我想接收的软件包是从FPGA板发送到PC的。。。你们中有人知道为什么这些被忽略了吗?根据Wireshark的说法,它们的形状非常完美。。。