2012-02-03 18 views
5

Uygulamam, çok noktaya yayın grubunu ve ana bilgisayardaki multicast grubunu birleştiren ip ile birlikte bir işaret göndermek için çok noktaya yayın kullanır. Android cihazda 127.0.0.1 döndürüyor. Etrafa baktım ve birçok kişinin bir ana bilgisayar dosyasını değiştirmeyi önerdiğini gördüm. Ancak, android durumunda benim bağlamda mümkün değildir.InetAddress.getLocalHost(). GetHostAddress(), 127.0.0.1 değerini döndürür.

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

Telefonumda, Wi-Fi etkinleştirilmiş ve bir Wi-Fi ağına bağlı olmadığı sürece, bir IP adresi yoktur. Yerel adres yoksa, 'getLocalHost', geri dönüş adresini döndürür. –

+0

@JoachimPileborg cevabımı dene. Umarım bu, problemi çözecektir. Uygulamam gönderildiğinde – himanshu

cevap

11

Değiştirilen birkaç bit ve bu, IPv4 adreslerini almak için istenen şekilde çalışıyor. ! inetAddress.isLoopbackAddress() tüm geri döngü adresini kaldırır. ! inetAddress.isLinkLocalAddress() ve inetAddress.isSiteLocalAddress()) tüm IPv6 adreslerini kaldırır. Umarım buradaki birisine yardım eder.

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

Sadece kimsenin unutmayacağından emin olmak için, AndroidManifest.xml adresinden INTERNET iznine ihtiyacınız olacak:

0

bu deneyin .. ben cihaz değil geri döngü adresi gerçek IP nasıl alabilirim: - Benim denemeden itibaren

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

.. uygulamayı kullanarak tüm kullanıcılar için hostname sağlamanın mümkün olacağını düşünüyor musunuz? Bulmanın başka bir yolu var mı? – Milan

0

, ben wifi ağ adresi oldu alabilir maksimum.

Aslında ip adresini veren bir web sunucusunu çağırmaktan başka bir yol bilmiyorum. Açıkçası, bununla ilgili problem, telefon verilerini kullanmasıdır.

İlgili konular