2012-09-25 163 views
3

我正在使用下面的代碼來獲取我的android手機的IP地址。帶IP地址的TCP服務器

try { 
     for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) { 
      NetworkInterface intf = en.nextElement(); 
      for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) { 
       InetAddress inetAddress = enumIpAddr.nextElement(); 
       if (!inetAddress.isLoopbackAddress()) { 
        return inetAddress.getHostAddress().toString(); 
        //return inetAddress; 
       } 
      } 
     } 
    } catch (SocketException ex) { 
     Log.e("SALMAN", ex.toString()); 
    } 

返回FE80 :: 94ae:97C:2680:c6cb%rmnet0

我然後設置端口8080

如何使用這個地址的客戶端連接到服務器它?我期待着一個IPv4地址...我可以通過chrome連接到它或測試連接嗎?

+1

嘗試netcat作爲您的客戶端。 – craig65535

回答

2

二者必選其一:

WifiManager wifiManager = (WifiManager) getSystemService(WIFI_SERVICE); 
WifiInfo wifiInfo = wifiManager.getConnectionInfo(); 
int ipAddress = wifiInfo.getIpAddress(); 

或者:

try { 
Socket socket = new Socket("www.stackoverflow.com", 80); 
    Log.i("", socket.getLocalAddress().toString()); 
} catch (Exception e) { 
    Log.i("", e.getMessage()); 
} 

您不能測試通過鉻您的連接,但你可以連接超過它,如果你使用HTTP協議。用另一個套接字編寫Java SE桌面進行通信。代碼非常相似。

+0

謝謝。要清楚,第二種方法在4G上正常工作? – greekygyro

+0

第二個通過您的活動連接工作,可能是以太網,wifi或移動連接。 第一個只適用於wifi。 – bluewhile