我正在尝试做一些非常简单的工作:使用我的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));
我会对任何可以解决这个问题的想法感到高兴。非常感谢你!
答案 0 :(得分:2)
代码很好并且正常 - 我已经测试过了。
您需要等待收到的数据,Client
对象仅存在于ReceiveAsync
尝试添加Thread.Sleep(10000)
修改强>
Thread.Sleep(1000)
不是好习惯,因为它阻止了线程
这取决于您要解决的问题/案例。您可能有某种TCP引擎处理多个连接或数据处理,因此您可以在缓冲区上说一些其他线程的数据。
如果你分享你试图解决的问题,也许可以给出更好的答案 也可以看到MSDN - UdpClient.BeginReceive
中的代码示例答案 1 :(得分:0)
我在这里找到了这个帖子
Receive messages continuously using udpClient
可能会有所帮助。