我正在嘗試創建同時使用TCP和UDP的服務器和客戶端。該服務器在局域網設置中運行良好,但在通過廣域網傳輸時,UDP消息未被接收。我相信這是因爲用於發送數據的UDP套接字沒有足夠長的時間保留在NAT表中以返回任何信息。有沒有辦法讓UDP端口在路由器中保持打開狀態(沒有端口轉發),或者使用與已經連接的TCP連接相同的UDP端口?提前致謝。廣域網上的TCP和UDP套接字服務器
3
A
回答
2
如果您沒有收到任何流量,可能是被防火牆阻止。在這種情況下,它不是關於轉發,而是關於打開端口。
大多數(如果不是全部的話)NAT /防火牆設備一旦穿透NAT穿孔,將允許雙向UDP流量。也就是說,如果我的筆記本電腦坐在NAT /防火牆後面,將UDP數據包發送到Internet,則我的NAT /防火牆將允許UDP流量返回到始發端口號。我使用UDP工作很多,我的經驗是這是規則,很少有例外。
請記住,雖然UDP數據包不能保證傳遞。
您的客戶端是否支持NAT?請問客戶端發送的任何數據包到達服務器嗎?服務器到客戶端的方向是否存在問題?
如果對UDP和TCP使用相同的端口號,則不會改變這種情況。您不能搭載TCP連接,因爲它是不同的協議。
Network Address Translation (NAT) Behavioral Requirements for Unicast UDP
相關問題
- 1. Python的ICMP套接字服務器(不是TCP \ UDP)
- 2. 停止UDP套接字服務器
- 3. 客戶端服務器udp套接字
- 4. PHP CLI UDP服務器套接字
- 5. 同時使用TCP和UDP套接字
- 6. TCP Python套接字服務器響應
- 7. Python:異步TCP套接字服務器
- 8. TCP套接字凍結服務器
- 9. 與TCP套接字(服務器)通信
- 10. C/Linux TCP套接字服務器
- 11. TCP套接字(服務器)設計
- 12. tcp套接字服務器不發送
- 13. 偵聽套接字udp和http連接的服務器代碼
- 14. UDP套接字廣播和ifaddrstruct
- 15. UDP廣播和自動服務器發現在Python中,TCP套接字不可用
- 16. Twisted - UDP和TCP服務器在一起
- 17. UDP套接字編程 - 在recev上的fork服務器
- 18. 轉換java基於線程的tcp套接字服務器到javascript async tcp套接字服務器
- 19. 廣域網上的UDP傳輸
- 20. 從tcp到udp的Java套接字
- 21. Arduino上的TCP問題。從Python TCP套接字服務器讀取字符串
- 22. AppFog上的Node.js TCP套接字服務器
- 23. 原生TCP偵聽雲或Web服務器上的套接字
- 24. 用於TCP套接字的Android服務
- 25. Akka和Scala中的簡單廣播套接字服務器
- 26. Heroku上的Java TCP/UDP服務器和客戶端
- 27. Python TCP服務器接受連接和廣播命令
- 28. whois的TCP套接字連接失敗的一個服務器
- 29. C#套接字TCP客戶端/服務
- 30. 無法連接到其他PC的TCP套接字服務器
是問題是在服務器到客戶端方向。我相信問題可能出在你說的話。我目前沒有使用最初發送UDP傳輸的端口,因此我無法通過NAT返回。我將嘗試調整客戶端和服務器以適應此情況。感謝你的回答。 – Stephen
我嘗試了你的建議,但仍然不成功。我有服務器檢索WAN IP和用戶在連接時發送的端口,然後客戶端正在監聽所有端口上的來自服務器的通信。你有可能看看一些代碼,看看是否有明顯的錯誤?我很感激。 – Stephen
@Stephen。當然。添加一個鏈接到您的問題。我會這樣做的方式是在服務器端使用recvfrom()和sendto()。您將該套接字綁定到特定的端口號。在客戶端確保使用單個套接字。 –