2011-03-15 3 views
6

나는 ksoap2-android을 사용하고 있으며 매번 수동으로 입력 할 필요가 없도록 java를 사용하여 IP 주소를 가져와야합니다.자바를 사용하는 Android 프로젝트에서 컴퓨터의 IP 주소 가져 오기

내가 IP 주소로 무엇을 의미, 예를 들어 내가 명령 쉘 사용 ipconfig를을 할 경우 :
연결 별 DNS 접미사를. :
링크 로컬 IPv6 주소. . . . . : f0 :: ed2 : e3bf : 8206 : 44 % 13
IPv4 주소. . . . . . . . . . . : 192.168.1.107 < - THIS ONE
서브넷 마스크. . . . . . . . . . . : 255.255.255.0
기본 게이트웨이. . . . . . . . . : 192.168.1.1

문제는 안드로이드 응용 프로그램을 개발하고 있으며, 에뮬레이터는 컴퓨터와 다른 유형의 IP를 가지고 있습니다.
컴퓨터의 IP를 가져와야합니다. 어떻게해야합니까?

덕분에 많은

답변

8
public String getLocalIpAddress() { 
     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(); 
        } 
       } 
      } 
     } catch (SocketException ex) { 
      Log.e(tag, ex.toString()); 
     } 
     return ""; 
    } 
+0

안드로이드 용으로 작동합니까? – shadesco

+0

@chadic 예. – Hades

+0

이것이 작동하는 동안, 나는 약간의 잘못된 반응을 얻고 있었고, 정규식으로 IP 주소 포맷을 검증해야만했다. 모든 유스 케이스에서 작동하는 듯하다. – broschb

2
InetAddress iA=InetAddress.getLocalHost(); 
System.out.println(iA.getHostAddress()); 

,

+0

이 클라이언트가 @ JigarJoshi에 연결된 서버의 IP 주소는 어떨까요? – gumuruh

4

는이 코드를 사용하여 안드로이드 장치의 IPADDRESS를 얻으려면 참조.

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

public String intToIp(int i) { 

    return ((i >> 24) & 0xFF) + "." + 
       ((i >> 16) & 0xFF) + "." + 
       ((i >> 8) & 0xFF) + "." + 
       (i & 0xFF) ; 
} 
+0

Wi-Fi를 사용할 수 없으면 3G 만 제공됩니까? –

+0

@Matt 모르겠지만 3G 연결은 IP 주소를 제공하지 않습니까? – asgs

+0

그래, 그들은이 코드가 여전히 작동하는지 궁금해했다. :) –