【问题标题】:C# application simply not receiving UDP dataC# 应用程序根本不接收 UDP 数据
【发布时间】:2013-06-04 13:41:16
【问题描述】:

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

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

【问题讨论】:

  • 如果 24 小时内没有得到答复,我会设置赏金。
  • OnReceive 不会在 UI 上下文中调用(它将在 ThreadPool 线程上运行),因此显示 MessageBox 可能不可靠。将其替换为 Debug.WriteLine 并在调试器中运行并重新发布。
  • 您调用 BeginReceive() 但从不调用 EndReceive() ?我认为您需要在 OnReceiveMethod 中传递 Client 对象来调用 client.EndReceive()
  • MSDN 示例和您的代码之间存在差异:msdn.microsoft.com/en-us/library/…(最值得注意的是UdpState
  • 我用 Debug.WriteLine 试过了,还是不行

标签: c# udp ethernet


【解决方案1】:

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

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

尝试添加Thread.Sleep(10000)

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

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

【讨论】:

  • 感谢您的测试!我让代码作为 Forms 应用程序的一部分运行,所以我不需要让应用程序休眠。
  • 所以我认为您需要将Client 保存为会员 - 请参阅我在答案中的评论
【解决方案2】:

我在这里找到了这个帖子

Receive messages continuously using udpClient

这可能会有所帮助。

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

【讨论】:

  • 到目前为止,我尝试了两个代码版本,当从另一个应用程序发送 UDP 包时,它们似乎都能很好地接收 UDP 包。不过,我想收到的包裹是从 FPGA 板发送到 PC 的……你们中的任何人可能知道为什么这些被忽略了吗?根据 Wireshark 的说法,它们的结构非常完美......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多