2013-01-12 3 views
0

나는 연결을 청취하고 특정 네트워크에서만 듣기를 원합니다. 나는이 같은 내 장치의 IP 주소를 얻을 수 있습니다 :안드로이드에서 네트워크 IP 주소 받기

private void printNetworkInterfaces() 
    { 
     try 
     { 
      Enumeration<NetworkInterface> nis = NetworkInterface.getNetworkInterfaces(); 
      for (NetworkInterface ni : Collections.list(nis)) 
      { 
       Enumeration<InetAddress> iis = ni.getInetAddresses(); 

       for (InetAddress ia : Collections.list(iis)) 
       { 
        // We only want IPv4 addresses 
        if (!isIPv4(ia.getHostAddress())) 
         continue; 
        // Do tomething with ia.getHostAddress(); 


       } 
      }  
     } 
     catch (SocketException e) 
     { 
      Log.w(TAG,e); 
     } 
    } 

하지만 그 대신 장치의 IP의, 내가 네트워크의 IP가 해당 네트워크에 듣고 싶은. 예를 들어 IP가 192.168.1.1 인 경우 네트워크 IP는 192.168.1.0이어야합니다.

네 번째 값을 0으로 직접 바꿀 수는 있지만 다른 네트워크에서는 실패합니다.

InetAddress.getHostAddress()에서 반환 한 IP 주소와 연결된 네트워크 주소를 가져올 수있는 방법이 있습니까? ?

+0

의 중복 가능성 [내가 같은 네트워크 프로그래밍하여 다른 와이파이 사용 가능 장치의 IP 주소를 얻을 수있는 방법은?] (http://stackoverflow.com/questions/12103898/how-can-i-get- 프로그래밍 방식으로 다른 주소로 Wi-Fi를 사용하는 장치의 주소) – Sameer

+0

그는 네트워크에서 다른 IP를 요청하고 있습니다. 네트워크 자체의 IP 주소를 묻습니다. – Twinone

답변

1

네트워크 마스크 및 IP에서 네트워크 IP를 계산할 수 있습니다.

wifii= (WifiManager) getSystemService(Context.WIFI_SERVICE); 
d=wifii.getDhcpInfo(); 
s_dns1="DNS 1: "+String.valueOf(d.dns1); 
s_dns2="DNS 2: "+String.valueOf(d.dns2);  
s_gateway="Default Gateway: "+String.valueOf(d.gateway);  
s_ipAddress="IP Address: "+String.valueOf(d.ipAddress); 
s_leaseDuration="Lease Time: "+String.valueOf(d.leaseDuration);  
s_netmask="Subnet Mask: "+String.valueOf(d.netmask);  
s_serverAddress="Server IP: "+String.valueOf(d.serverAddress); 
+0

어떻게 계산합니까? 또한 DhcpInfo는 WifiManager에만 있고 ConnectivityManager에는 없습니다. – Twinone

+0

간단히 말해서 마스크 비트는 ip 비트입니다. http://en.wikipedia.org/wiki/Subnetwork 또는 다음을 사용하십시오. http://stackoverflow.com/questions/1221517/how-to-get-subnet-mask-using-java – Totoo

+0

감사합니다. – Twinone