.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

我可以在 C# 中为 UdpClient 设置超时吗?

无法访问已处置的对象。对象名称:'System.Net.Sockets.UdpClient'

在多线程环境中使用 .Net UdpClient

是否应该处置 UdpClient?