2012-09-24 34 views
0

我想用java套接字連接不同網絡上的兩個Android設備。一臺設備將充當服務器,另一臺充當客戶端。服務器必須發佈哪個地址才能讓客戶端連接到它?使用Java套接字,連接到另一個網絡上的其他設備的正確地址是什麼?

java.net具有InetAddress類,方法getLocalHost()提供了一個帶有本地主機信息(主機名,本地主機地址)的實例。如果我在我的機器上運行它,我給出的地址是192.168.1.101。這是服務器設備必須發佈的地址才能讓客戶端設備連接到它嗎?我假設沒有,因爲它是一個本地地址。那麼,我在哪裏可以得到每個設備的正確地址?

回答

1

您可以使用NetworkInterface來枚舉所有網絡接口。您可能還需要處理連接更改,例如從3G切換到Wifi等。通常,您的設備不保證具有全球IP地址,因此除非您只在自己的網絡上運行它,並且您擁有有效的IP或已經設置了必要的NAT /端口轉發等,您可能無法連接到它。

+0

我試過這種方式,它給出了與InetAddress相同的地址。 –

+1

在這種情況下,您的設備已連接到某個使用NAT的WiFi路由器。您必須爲設備提供全球IP或設置路由器以轉發您需要連接到Android設備的端口。然後,您將使用路由器的(全局)地址連接到您的Android服務器。總而言之,這不是一個好主意,除非是用於測試/實驗。 –

相關問題