Netcat作为UDP客户端不接收来自Arduino Wifi Shield的响应数据包。简单的C UDP客户端。为什么?

时间:2014-02-13 06:07:30

标签: sockets networking udp arduino client-server

我正在使用Arduino Wifi Shield测试WiFi UDP Send and Receive String示例Arduino代码(2013年3月最新的固件更新),并且我得到了无法解释的行为。

预期操作

Arduino从路由器上另一台计算机的本地任意端口接收UDP数据包 - remoteIP:remotePort。它向客户端确认它已经通过将自己的UDP数据包发送回remoteIP:remotePort来接收数据包。

我以为我会使用netcat进行测试。 netcat将发送UDP数据包并且Arduino接收,但netcat没有收到Arduino发送的数据包。责任在于netcat,因为我使用了Simple C UDP Client并且该客户端将收到Arduino服务器的UDP响应。

有谁知道Netcat会造成什么额外残余?我在TCP上使用netcat与使用未知协议的服务器进行交互时发现了类似的问题。互动不是原始的,"似乎应该没有出现的东西,就像这些来自UDP服务器的UDP数据包一样。它是否与UDP数据包的构成有关,不满足netcat?

Arduino UDP Server Code

Simple C UDP Client Code

1 个答案:

答案 0 :(得分:2)

您的代码和nc之间的主要区别在于,您使用未连接的套接字并在sendto调用中指定收件人,而nc将使用连接的套接字。这意味着,您的套接字将接受来自任何地址的回复,而nc将仅接受来自发送请求的相同IP 和端口的回复。我不知道你使用的Arduino udp库,但从简短的代码看我没有看到任何像使用udp连接,所以我认为我的理论是正确的。如果您使用tcpdump / wireshark,我希望您在IP cip和端口cport以及Aripino的IP cip和端口32000(与您的示例C代码匹配)中看到您的客户端:

--> request from cip:cport to   aip:32000
<-- reply to     cip:cport from aip:random_port

但是如果你想让它与nc一起使用你需要的是

--> request from cip:cport to   aip:32000
<-- reply to     cip:cport from aip:32000