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