【发布时间】: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 试过了,还是不行