我有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. 檢查端口是否打開
- 3. iOS/Objective-C中的TCP客戶端 - 檢查打開端口
- 4. 客戶端是否需要爲sFTP打開端口號爲
- 5. 如何檢查是否UDP端口是打開還是關閉
- 6. 檢查客戶端端口是開放的,並轉發[C#,ASP.NET]
- 7. 檢查HTTP端口是否在Windows上打開
- 8. 如何檢查端口是否在客戶端的網絡/防火牆中打開?
- 9. 如何檢查電腦上的可用端口?
- 10. UDP端口打開檢查
- 11. Silverlight客戶端端口檢查
- 12. 檢查WebSocket是否是hixie客戶端?
- 13. iOS SDK:如何檢查端口是否打開?
- 14. OSX:git慢克隆。如何檢查端口9418是否打開?
- 15. 如何檢查遠程端口是否打開
- 16. 如何檢查某個端口是否打開和未使用?
- 17. 如何檢查端口465和587是否用PHP打開?
- 18. 如何檢查遠程UDP端口是否打開? C
- 19. 如何異步檢查客戶端是否斷開連接?
- 20. 如何檢查客戶端是否已斷開連接?
- 21. 檢查Android/Java上的端口是否打開
- 22. 如何檢查電子郵件客戶端是否安裝在設備上
- 23. 如何檢查客戶端是否可以通過端口843連接?
- 24. 意圖打開電子郵件客戶端,短信客戶端
- 25. 如何檢查客戶端上的ListBox是否爲空
- 26. 檢查客戶端上是否打開或關閉Dynamics CRM活動
- 27. 檢查終端是否打開
- 28. 如何檢查到端口的網絡連接是否未打開,或者沒有在該端口上偵聽?
我相信這超出了UDP的範圍。 – Nick 2012-04-05 13:54:59
嗯...我可以用線程做這樣的事情嗎?線程服務器的消息和線程供用戶選擇? – 2012-04-05 14:22:15
我認爲你需要用你想用用戶選擇實現的目標來更新這個問題。或者在這個問題上選擇一個答案,並創建一個後續問題。 – Paaske 2012-04-05 14:34:26