.Net UdpClient Receive - 关于为啥它不返回任何内容的技术问题
Posted
技术标签:
【中文标题】.Net UdpClient Receive - 关于为啥它不返回任何内容的技术问题【英文标题】:.Net UdpClient Receive - A technical question about why it doesnt return anything.Net UdpClient Receive - 关于为什么它不返回任何内容的技术问题 【发布时间】:2020-01-08 23:20:36 【问题描述】:我正在根据设备的 IP 地址和端口与设备建立 UDP 连接(成功)。 我可以成功地向它发送消息(以字节编码)。 但是,我没有看到从 client.Receive() 方法返回的响应。
我向您提出的技术问题与Receive() 方法有关。
也许我的理解是完全错误的,但我想我用来连接设备的IP地址+端口应该是相同的,当我调用Receive()方法时。
但根据示例,情况似乎并非如此。
谁能解释一下为什么不使用相同的 IP 地址 + 端口 调用 Receive() 时?
A) Note that i can see a response using a sniffer like Wireshark. But i just dont see the response returning from the C# udpClient.Receive(ref endpoint) method itself.
B) Also, i am using this API document which says that the device (drone) can receive and send a response on the same IPAddress + port.
【问题讨论】:
【参考方案1】:UDP 数据包是无状态的,实际上没有连接。与 TCP 流不同,connect 方法不会触发任何网络数据包。它所做的只是提供一个默认地址,因此您在发送新数据包时不需要提供一个。并设置一个数据包过滤器,以便只接收与该远程地址(包括端口号)完全匹配的数据包。
receive 方法仍应为您提供远程端点的地址。
请注意,如果您没有将 UdpClient 绑定到特定端点,并且计算机具有多个网络地址,则操作系统可能会从与您预期不同的地址发送数据包。
【讨论】:
问题是 Receive( ) 从不为我返回任何东西。以上是关于.Net UdpClient Receive - 关于为啥它不返回任何内容的技术问题的主要内容,如果未能解决你的问题,请参考以下文章
UdpClient,在 Send() 之后的 Receive() 不起作用?
如何在循环中使用 UdpClient.BeginReceive