2012-02-03 29 views
5

Ứng dụng của tôi sử dụng multicast để gửi một đèn hiệu trong khoảng thời gian cùng với thông báo giao thức và ip của máy chủ tham gia nhóm multicast. Trong thiết bị Android, nó đang trở về 127.0.0.1. Tôi đã nhìn xung quanh và thấy rằng nhiều người đề nghị thay đổi một tập tin host. Nhưng, trong trường hợp của android nó không phải là có thể trong bối cảnh của tôi. Làm thế nào để tôi nhận được IP thật của thiết bị, không phải là địa chỉ loopback ..InetAddress.getLocalHost(). GetHostAddress() trả về 127.0.0.1 trong Android

private void getLocalAddress() 
{ 
    try { 
     String localHost = InetAddress.getLocalHost().getHostAddress(); 
     servers.add(localHost); 
    } catch (UnknownHostException e) { 
     e.printStackTrace(); 
    } 
} 
+1

Trên điện thoại của tôi, trừ khi Wi-Fi được kích hoạt và được kết nối với mạng Wi-Fi, địa chỉ IP không có địa chỉ IP. Nếu không có địa chỉ cục bộ thì 'getLocalHost' trả về địa chỉ loopback, đó là những gì bạn nhận được. –

+0

@JoachimPileborg thử trả lời của tôi.Tôi hy vọng điều này sẽ giải quyết vấn đề ur. – himanshu

Trả lời

11

Đã sửa đổi một vài bit và bit này đang hoạt động như mong muốn để nhận địa chỉ IPv4. ! inetAddress.isLoopbackAddress() loại bỏ tất cả địa chỉ loopback. ! inetAddress.isLinkLocalAddress() và inetAddress.isSiteLocalAddress()) loại bỏ tất cả các địa chỉ IPv6. Tôi hy vọng điều này sẽ giúp một ai đó ở đây.

StringBuilder IFCONFIG=new StringBuilder(); 
    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() && !inetAddress.isLinkLocalAddress() && inetAddress.isSiteLocalAddress()) { 
       IFCONFIG.append(inetAddress.getHostAddress().toString()+"\n"); 
       } 

      } 
     } 
    } catch (SocketException ex) { 
     Log.e("LOG_TAG", ex.toString()); 
    } 
    servers.add(IFCONFIG.toString()); 
+0

Chỉ để đảm bảo không ai quên nó, bạn sẽ cần sự cho phép INTERNET trên AndroidManifest.xml của bạn:

0

Hãy thử điều này: -

String hostname = args[0]; 
try 
    { 
     InetAddress ipaddress = InetAddress.getByName(hostname); 
     System.out.println("IP address: " + ipaddress.getHostAddress()); 
    } 
    catch (UnknownHostException e) 
    { 
     System.out.println("Could not find IP address for: " + hostname); 
    } 
+0

khi đơn đăng ký của tôi được gửi đi..vì vậy, bạn có nghĩ rằng có thể cung cấp tên máy chủ cho tất cả người dùng bằng ứng dụng không? Bạn có biết cách nào khác để tìm nó không? – Milan

0

Từ cố gắng của tôi, tối đa tôi có thể nhận được là địa chỉ mạng wifi.

Tôi không biết cách nào khác ngoài việc thực sự gọi một máy chủ web trả về địa chỉ IP. Rõ ràng, vấn đề với điều này là nó sử dụng dữ liệu điện thoại.

Các vấn đề liên quan