2009-11-12 3 views
57

코드를 통해 현재 실행중인 Android Emulator의 IP 주소를 가져 오려고합니다. 어떻게 달성 할 수 있습니까? 이처럼Android 에뮬레이터의 IP 주소를 얻는 방법은 무엇입니까?

+1

아마도 여기 [관련 링크] (http://stackoverflow.com/questions/7447221/how-to-connect-to-avd)와 [here] (http://stackoverflow.com/questions/13217796/is- android-avds-firewall-any-how-more-to-real-android-firewall)를 사용합니다. – hhh

+0

@hhh 두 번째 링크가 끊어졌습니다. :) –

+1

@ MuhamedHuseinbašić 나는이 스레드가 두 번째 스레드에서 문제를 해결 했으므로 삭제하기로 결정했다. – hhh

답변

119

간단히 말해서 앱에서 'localhost'또는 127.0.0.1로 간단히 참조 할 수 있습니다.

웹 트래픽은 개발 컴퓨터를 통해 라우팅되므로 에뮬레이터의 외부 IP는 공급자가 해당 컴퓨터에 할당 한 IP입니다. 개발 기계는 10.0.2.2에있는 장치에서 항상 접근 할 수 있습니다.

에뮬레이터의 IP에 대해서만 묻기 때문에 무엇을하려는 것입니까?

+6

나는 이것을 위해 100 번 upvote하고 싶다. 귀하의 게시물을 읽을 때까지 내 앱이 실행중인 다른 로컬 서버와 어떻게 대화 할 수 있는지 파악할 수 없었습니다. 감사! – Spike

+0

10.0.2.2에서 개발 시스템에 어떻게 접근 할 수 있습니까? 나는 핑 소리를 내었지만 아무 것도하지 않았다. [여기] (http://i.stack.imgur.com/Yjv7W.jpg). Ifconfig - 오른쪽에있는 응용 프로그램과 터미널 에뮬레이터에서 ping dev-machine을 시도합니다. localhost에서 간단한 테스트를 볼 수 없습니까? – hhh

+0

@hhh JuiceSSH를 시도해 볼 수 있습니다. https://play.google.com/store/apps/details?id=com.sonelli.juicessh 언급 된 IP 또는 호스트의 실제 IP에서 호스트에 연결할 수 있습니다. 두 변종 모두 나를 위해 일합니다. –

25

자세한 정보를 원하시면

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(LOG_TAG, ex.toString()); 
    } 
    return null; 
} 

확인 문서 : NetworkInterface.

+4

그리고 'android.permission.INTERNET'허가 –

+2

이것은 IP6 주소를 어떻게 제공합니까? –

3
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(LOG_TAG, ex.toString()); 
    } 
    return null; 
} 
28

당신은 IP가 에뮬레이터에 할당하려는 진정한 경우 :

당신 같은 줄 것이다
adb shell 
ifconfig eth0 

:

eth0: ip 10.0.2.15 mask 255.255.255.0 flags [up broadcast running multicast] 
+0

이것은 너무 좋았지 만이 주소는 내 PC에서 Ping하지 않습니다. ( –

+0

[Luise] (https://stackoverflow.com/users/6066443/louise) : * Derek 메서드를 시도했는데 adb 셸에서 ping 할 수 있습니다 *. – SmokeDispenser

+0

'adb shell'다음에이 에러가 나옵니다.'ifconfig : eth0 : No such device'any ideas why? – awavi

7

것은 당신이 당신의 호스트 컴퓨터의 로컬 호스트를 참조해야하는 경우를 에뮬레이터 클라이언트가 동일한 호스트에서 실행중인 서버에 연결하도록하려는 경우 10.0.2.2이라는 별칭을 사용하여 호스트 컴퓨터의 루프백 인터페이스를 참조하십시오. 에뮬레이터의 관점, 로컬 호스트 (127.0.0.1)에서는 자신의 루프백 interface.More 세부 사항을 참조 : http://developer.android.com/guide/faq/commontasks.html#localhostalias

12

사용 당신이 당신의 안드로이드 에뮬레이터에 대한 100 % 정확한 IP 주소를 얻는 것이 방법

이 명령을 yoor 에뮬레이터 ADB 쉘

이동의 IP 주소를 얻을 입력합니다

adb shell 
ifconfig eth0 

enter image description here

이 명령을 실행 한 후 나는

IP를 얻고있다 : 10.0.2.15

마스크 : 255.255.255.0 나를 위해 작동

. 나는 또한 네트워킹 응용 프로그램을 위해 일하고있다.