我在Windows 7中使用Winsock類CAsyncSocket創建一個UDP聊天程序。它只是打開一個未連接的UDP套接字,並允許將文本字符串發送到另一臺運行該聊天程序的計算機。我發現當我的聊天程序運行在兩臺帶有以太網NIC的交叉網線連接的計算機上時(無其他網絡流量),無論哪臺計算機首先嚐試傳輸,直到從另一臺計算機發送第一個數據報之後,它都不成功。在以下屏幕捕獲計算機#1嘗試發送三次「測試」,而計算機#2未收到它。然後計算機#2發送由#1接收的「hello」。然後計算機#1再次發送「測試」並且這次它被接收。儘管從#1開始的「測試」的三次初始傳輸看起來沒有經過,但他們顯然做了一些事情,如果在#1的「測試」消息之前發送來自#2的「hello」,則「hello」消息是丟失了。UDP未連接套接字發送失敗,直到它收到第一個數據報
計算機#1
計算機#2
後每臺計算機已經成功地發送數據報則所有隨後的數據報沒有發送和接收問題。如果我只關閉並重新打開一個端口[重置本地端口],那麼每臺計算機仍可以成功發送和接收數據。如果我[重置本地端口]兩臺電腦,然後在大多數情況下,第一個發送經驗相同的問題,但並不總是。有時甚至在[重置本地端口]發送和接收仍然工作。 創建未連接套接字的調用是
Create(i_LocalPort, SOCK_DGRAM, FD_READ, m_LocalSockAddrIn.AddrStr());
然後
CAsyncSocket::SendTo()
發送數據報。尋找一些關於這裏發生了什麼的提示。
更新信息:使用Wireshark查看丟失的數據包似乎是使用適當的源地址和目標地址發送的,但目的地沒有收到它們。
您的網卡是否配置爲使用DHCP?如果是這樣,交叉電纜將從網絡中消除所有可能的DHCP服務器,因此它們都沒有IP地址,這可以解釋它。測試不是一個現實的情況。 – EJP
我訴諸交叉和靜態IP地址,試圖消除其他變量,如網絡交換機不通過數據報或其他網絡通信導致UDP故障。它在我的本地局域網上,我首先看到了這個問題。 – JonN
我仍在嘗試解決此問題。我已經與其他UDP聊天程序進行了測試,並發現無法使用這些程序接收數據報。我現在懷疑網絡環境。我嘗試使用 http://udp-win-chat.software.informer.com/download/ 並有一個情況,發送和接收 與交叉電纜上的隔離網絡和運行WireShark我看到發送的數據報從雙方但沒有udpchat程序顯示爲收到任何東西。 – JonN