簡體   English   中英

Netcat作為UDP客戶端不接收來自Arduino Wifi Shield的響應數據包。 簡單的C UDP客戶端。 為什么?

[英]Netcat as UDP Client does not receive response packets from Arduino Wifi Shield. Simple C UDP Client Does. Why?

我正在測試帶有Arduino Wifi Shield的WiFi UDP發送和接收字符串示例Arduino代碼(最新的固件更新於2013年3月),我得到的行為我無法解釋。

預期的運作

Arduino從路由器上另一台計算機的本地任意端口接收UDP數據包 - remoteIP:remotePort。 它向客戶端確認它已經通過將自己的UDP數據包發送回remoteIP:remotePort來接收數據包。

我以為我會用netcat測試一下。 netcat將發送UDP數據包並且Arduino接收,但netcat沒有收到Arduino發送的數據包。 責任在於netcat,因為我使用了簡單的C UDP客戶端 ,而客戶端WOULD收到了Arduino服務器的UDP響應。

有誰知道Netcat會引起什么額外的瑕疵? 我在TCP上使用netcat與使用未知協議的服務器進行交互時發現了類似的問題。 交互不是“原始的”,似乎應該沒有出現的東西,就像來自UDP服務器的UDP數據包一樣。 這是不是滿足netcat的UDP數據包的構成?

Arduino UDP服務器代碼

簡單的C UDP客戶端代碼

您的代碼和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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM