我正在使用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?
答案 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