2012-11-17 3 views
1

나는 WiFi를 통해 브로드 캐스트 패킷을 보내야하는 안드로이드 응용 프로그램을 작성하고 있습니다.IP 주소에서 브로드 캐스트 주소를 얻는 가장 좋은 방법은 무엇입니까?

현재 WifiManager.getConnectionInfo().getIpAddress()에서 장치의 IP 주소를 가져올 수 있으며 단순히 마지막 숫자를 0으로 바꾸어 브로드 캐스트 주소를 추측 할 수 있습니다. 그러나이 솔루션은 정말 마음에 들지 않습니다.

적절한 방법은 무엇입니까?

답변

-1

0이 아닌 255으로 교체해야합니다.

SDK 9 이상을 타겟팅하는 경우 getBroadcast()을 사용할 수 있습니다. 그렇지 않으면 IP 주소의 숫자를 덮어 써야합니다.

예제 코드 :이 같은

public static InetAddress getNetworkLocalBroadcastAddressdAsInetAddress() throws IOException { 
    for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) { 
     NetworkInterface intf = en.nextElement(); 
     if(VERSION.SDK_INT < 9) { 
      if(!intf.getInetAddresses().nextElement().isLoopbackAddress()){ 
       byte[] quads = intf.getInetAddresses().nextElement().getAddress(); 
       quads[0] = (byte)255; 
       quads[1] = (byte)255; 
       return InetAddress.getByAddress(quads); 
      } 
     }else{ 
      if(!intf.isLoopback()){ 
       List<InterfaceAddress> intfaddrs = intf.getInterfaceAddresses(); 
       return intfaddrs.get(0).getBroadcast(); //return first IP address 
      } 
     } 
    } 
    return null; 
} 
+3

는 서브넷 마스크를 모른 채 브로드 캐스트 주소를 알 수 없습니다. 귀하의 구현은 순전히 특정 서브넷 크기를 가정합니다. – Brad

2

시도 뭔가 :

public static String getBroadcast(){ 
    String found_bcast_address=null; 
    System.setProperty("java.net.preferIPv4Stack", "true"); 
     try 
     { 
      Enumeration<NetworkInterface> niEnum = NetworkInterface.getNetworkInterfaces(); 
      while (niEnum.hasMoreElements()) 
      { 
      NetworkInterface ni = niEnum.nextElement(); 
      if(!ni.isLoopback()){ 
       for (InterfaceAddress interfaceAddress : ni.getInterfaceAddresses()) 
       { 

        found_bcast_address = interfaceAddress.getBroadcast().toString(); 
        found_bcast_address = found_bcast_address.substring(1); 

       } 
      } 
      } 
     } 
     catch (SocketException e) 
     { 
      e.printStackTrace(); 
     } 

     return found_bcast_address; 
} 
관련 문제