2012-04-23 2 views
0

나는 장치에 대한 응용 프로그램을 작성했으며 장치 IP 주소를 가져 와서 화면에 인쇄합니다. 이 앱을 내 탭 10.1에 설치하면 IP 주소가 이상한 형식의 문자와 숫자로 나옵니 까?응용 프로그램에 대한 갤럭시 탭 10.1의 IP 주소 찾기

private String getIpAddress() 
    { 
     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 null; 
    } 

탭 10.1과 다른 점은 무엇입니까?

는 (IP 반환 - FE80 :: be47 : 60fF을 : FEFF : 21e2)

요구를 IP 주소로 이것이 내가 내 응용 프로그램에 연결하는 PC의 터미널에 전달 무엇으로.

+3

질문에 "편지와 숫자가 이상한 형식으로"추가 할 수 있습니까? IPv6 주소 일 수도 있습니다. –

+0

은 질문 하단에 추가되었습니다. –

+1

http://en.wikipedia.org/wiki/Link-local_address –

답변

3

Galaxy Tab 10.1은 IPv6 주소 (이 경우 fe80::be47:60ff:feff:21e2)를받습니다. 이것은 IPv6에 관한 HTC Desire 및 Galaxy Tab의 다양한 기본 설정 또는 기능으로 인해 발생할 수 있습니다.

IPv4 주소 공간이 부족할 때 점점 더 많은 장치가 IPv6 주소를 사용해야합니다. Nesim으로

질문에 대한 자신의 의견에서 지적, IPv6은 fe80:로 시작하는 주소 link-local addresses이며, 주소 즉 범위 장치 자체 양수인이 주소를 밖으로 손을 모든 네트워크, 예를 들어, 아무런 연결이없는 경우 DHCP를 통해.

Galaxy Tab이 Wi-Fi 네트워크에 연결되어 있지 않거나 DHCP를 통해 주소를받지 못하는 것 같습니다.

질문의 코드 단편은 찾은 첫 번째 주소를 반환하고 외부에서 연결하는 데 유용한 링크 로컬 주소를 필터링하지 않습니다. 다음 코드는 루프백이나 링크 로컬이 아닌 모든 주소를 제공합니다. 당신까지 어떻게 그들 중 많은 사람들 사이의 선택입니다 - 솔직히 모르겠어요 비교를 위해

private static List<InetAddress> getIpAddress() { 
    try { 
    List<InetAddress> result = new ArrayList<InetAddress>(); 

    Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces(); 
    while (interfaces.hasMoreElements()) { 
     NetworkInterface intf = interfaces.nextElement(); 
     Enumeration<InetAddress> addresses = intf.getInetAddresses(); 
     while (addresses.hasMoreElements()) { 
     InetAddress address = addresses.nextElement(); 
     if (!address.isLoopbackAddress() && !address.isLinkLocalAddress()) { 
      result.add(address); 
     } 
     } 
    } 
    return result; 
    } catch (SocketException ex) { 
    Log.e(TAG, "Failed to list network interfaces.", ex); 
    return null; 
    } 
} 

, 내 Windows 시스템은 10 개 주소의 총 (대부분 가상) (23) 네트워크 인터페이스를 나열, 그 중 2 개는 루프백 주소 (localhost), 4 개의 링크 로컬 주소입니다. 위 코드가 반환 할 4 개의 주소를 남겨 둡니다. 첫 번째 주소를 선택하면 지나치게 낙관적으로 보입니다.

+0

알 겠어요.하지만 이걸 이해하지만 PC의 터미널에 IP 주소를 전달하여 안드로이드 앱에 연결해야합니다. –

+0

It * * IPv4 주소가 아닌 IP 주소입니다. 모든 최신 소프트웨어는 IPv4와 IPv6를 모두 처리 할 수 ​​있어야합니다. 터미널이 없으면 다른 터미널을 찾아야합니다. –

+0

Nesim은 질문에 대한 의견을 지적하므로 링크 로컬 주소, 즉 연결이없는 경우 장치가 자체 할당 한 주소입니다. 어쩌면 갤럭시 탭이 Wi-Fi 네트워크에 연결되지 않았을까요? –