UdpClient,在 Send() 之后的 Receive() 不起作用?
Posted
技术标签:
【中文标题】UdpClient,在 Send() 之后的 Receive() 不起作用?【英文标题】:UdpClient, Receive() right after Send() does not work? 【发布时间】:2010-09-18 07:38:21 【问题描述】:考虑以下代码:
client.Send(data, data.Length, endpoint);
byte[] response = client.Receive(ref endpoint);
虽然,根据 WireShark(网络嗅探器),远程主机确实回复了数据, 这里的应用程序只是永远等待数据......由于某种原因它没有收到来自远程主机的答案。
有什么想法吗?
【问题讨论】:
你在调用client.Connect()吗?如果是这样,它将只接受来自 Connect 方法中提供的 enpoint 的数据。 你解决过这个问题吗? 那是 10 年前的事了,据我所知,我使用了 @ageektrapped 的解决方案并习惯了客户。这些天来,我尽量避免直接使用 udp/tcp,而更喜欢 ZeroMQ/NetMQ 与协议缓冲区相结合的解决方案 【参考方案1】:您可能想要设置两个 UdpClients:一个用于侦听,一个用于发送。
对于接收UdpClient,使用接受端口的构造函数。
【讨论】:
【参考方案2】:可能远程主机有防火墙然后无法响应请求,在发送请求之前设置
client.Client.ReceiveTimeout = 5000;
所以当响应无法得到请求时,你有一个例外
【讨论】:
以上是关于UdpClient,在 Send() 之后的 Receive() 不起作用?的主要内容,如果未能解决你的问题,请参考以下文章