我有UDPserver接收來自客戶端的消息並向他們發送響應。但是我需要檢查一下UDP客戶端是否在線。 使用isReachable我可以測試pc是否在線。但是當不同的客戶端使用相同的PC但具有不同的端口時如何檢查端口是否打開(客戶端1的端口5678在線但客戶端2 6777關閉.IP 192.168.1.7在這種情況下IP是可達的,但客戶端2不是)?如何檢查端口是否在客戶端電腦上打開?
回答
UDP是一種無連接,不可靠的面向分組的協議。如果沒有綁定到遠程機器上特定端口的套接字,那麼數據包將被簡單地丟棄。
您將不得不實施某種支持檢測客戶端是否在線的協議。也許定期發送保持活動類型的消息。
但客戶端可以發送消息到服務器。消息由用戶選擇。而且不可能等待用戶的選擇,同時也不能等待服務器的消息。或者它可能在UDP上? – 2012-04-05 14:10:11
你在這裏混淆了兩個不同的概念。 'isReachable'函數是一個IP層屬性,它只是簡單地檢查IP地址是否對IP協議數據包(它是)做出響應。
UDP是一種廣播數據報協議,專爲通過IP進行未確認的數據廣播而設計,因此它沒有內置的'可達性'概念。您的UDP客戶端必須以某種方式監視傳入的檢測消息,並相應地對其進行響應。
如果您的客戶端沒有運行,IsReachable將僅對給定的主機so event執行ICMP回顯請求(ping),但只要您的主機響應ICM請求,它將顯示爲可訪問。
如果您要檢查您的遠程客戶端是否正在運行,您需要實現一個簡單的「ping」協議:即:您的服務器將向客戶端發送特殊消息,並且客戶端必須對其進行響應。
如果唯一的問題是要知道客戶端是否還活着,那麼來自客戶端的保持活動消息是最簡單的。您可以從包的內容(或發件人端口)識別客戶端。
如果你想發送消息到客戶端,我認爲你必須在兩端都有一個UDP服務器,然後交換'客戶端 - 服務器'正在監聽的端口並將其用於通信。
當然,後者會導致防火牆出現問題,因爲大多數會阻止所有傳入流量。
- 1. 檢查端口是否打開
- 2. 如何檢查是否UDP端口是打開還是關閉
- 3. 檢查客戶端端口是開放的,並轉發[C#,ASP.NET]
- 4. 檢查HTTP端口是否在Windows上打開
- 5. UDP端口打開檢查
- 6. Silverlight客戶端端口檢查
- 7. OSX:git慢克隆。如何檢查端口9418是否打開?
- 8. iOS SDK:如何檢查端口是否打開?
- 9. 如何檢查端口465和587是否用PHP打開?
- 10. 如何檢查遠程UDP端口是否打開? C
- 11. 如何檢查遠程端口是否打開
- 12. 如何異步檢查客戶端是否斷開連接?
- 13. 檢查客戶端上是否打開或關閉Dynamics CRM活動
- 14. 檢查終端是否打開
- 15. 如何檢查端口是否可用
- 16. 如何檢查客戶端JavaScript中的端口可用性?
- 17. 在客戶端PC上打開fileZilla
- 18. 如何確定端口是否在Windows服務器上打開?
- 19. 如何檢查客戶端是否是Java本地的
- 20. 如何在Mac上打開端口80?
- 21. 在Apache2上打開端口
- 22. 撥打電話後獲取客戶端端口(C)
- 23. 使用Java檢查打開的端口
- 24. Python檢查udp端口打開
- 25. 如何檢測客戶端是否已從JavaScript打開/關閉Rails?
- 26. 如何檢查Pyro4客戶端是否還活着
- 27. Rails如何檢查session_id cookie是否被客戶端更改
- 28. 如何檢查客戶端是否連接到XMPP服務器
- 29. 如何在用sendto發送時強制UDP客戶端打開端口
- 30. 在HTTPD上檢索客戶端源端口 - > Tomcat設置
我相信這超出了UDP的範圍。 – Nick 2012-04-05 13:54:59
嗯...我可以用線程做這樣的事情嗎?線程服務器的消息和線程供用戶選擇? – 2012-04-05 14:22:15
我認爲你需要用你想用用戶選擇實現的目標來更新這個問題。或者在這個問題上選擇一個答案,並創建一個後續問題。 – Paaske 2012-04-05 14:34:26