Intereting Posts

Android Broadcast Address

Я делаю приложение Client Server для своего телефона Android .

Я создал UDP сервер в Python который сидит и слушает подключения.

Я могу поместить либо IP адрес сервера так же, как 192.169.0.100 и он отправляет данные в порядке. Я также могу установить 192.168.0.255 и найти сервер на 192.169.0.100 .

Возможно ли получить широковещательный адрес сети, к которой подключен мой Android-телефон? Я только собираюсь использовать это приложение в своей сети Wifi или других Wifi сетях.

ура

Поскольку широковещательный IP-адрес является текущим IP-адресом, но заканчивается 255, вы можете сделать что-то вроде этого:

 public String getLocalIpAddress() { 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) {} return null; } public static String getBroadcast() throws SocketException { System.setProperty("java.net.preferIPv4Stack", "true"); for (Enumeration<NetworkInterface> niEnum = NetworkInterface.getNetworkInterfaces(); niEnum.hasMoreElements();) { NetworkInterface ni = niEnum.nextElement(); if (!ni.isLoopback()) { for (InterfaceAddress interfaceAddress : ni.getInterfaceAddresses()) { return interfaceAddress.getBroadcast().toString().substring(1); } } } return null; } 

Из

http://code.google.com/p/boxeeremote/source/browse/trunk/Boxee+Remote/src/com/andrewchatham/Discoverer.java?spec=svn28&r=28

 private InetAddress getBroadcastAddress() throws IOException { WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE); DhcpInfo dhcp = wifi.getDhcpInfo(); // handle null somehow int broadcast = (dhcp.ipAddress & dhcp.netmask) | ~dhcp.netmask; byte[] quads = new byte[4]; for (int k = 0; k < 4; k++) quads[k] = (byte) (broadcast >> (k * 8)); return InetAddress.getByAddress(quads); } 

Это имеет то преимущество, что только смотришь на WIFI. Я знаю, что OP сказал: «Я только собираюсь использовать это приложение в своей Wi-Fi сети или других Wi-Fi-сетях». Но стоит упомянуть об этом, если кто-то еще нуждается в альтернативе, отличной от wifi.

Вот метод, который должен работать:

  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; } 

Простейший способ, возможно …

 public static String getBroadcast() throws Exception { System.setProperty("java.net.preferIPv4Stack", "true"); InetAddress inet = InetAddress.getLocalHost(); NetworkInterface net = NetworkInterface.getByInetAddress(inet); InterfaceAddress [] interfaceAddresses = net.getInterfaceAddresses().toArray(new InterfaceAddress[0]); if ( interfaceAddresses.length > 0 ) { return interfaceAddresses[0].getBroadcast().toString().substring(1); } else { return "255.255.255"; } }