[Android]获取局域网广播地址的两种方法
来源:互联网 发布:软件如何申请著作权 编辑:程序博客网 时间:2024/05/17 01:12
第一种是自己写的,有一些bug,不过凑合着用也可以,第二种是stackoverflow的,推荐用这种。
(1)
private InetAddress calcBroadcastAddress(InetAddress mask, InetAddress ip)throws IOException {int ipaddress = getIntAddress(ip);int maskaddress = getIntAddress(mask);int broadcast = ipaddress & maskaddress | ~maskaddress;byte[] quads = new byte[4];for (int k = 0; k < 4; k++) {quads[k] = (byte) ((broadcast >> k * 8) & 0xFF);}return InetAddress.getByAddress(quads);}private InetAddress getBroadcastAddress() throws IOException {// 自动获取String strIp = getCommandResult("/system/bin/getprop","dhcp.eth0.ipaddress");String strMask = getCommandResult("/system/bin/getprop","dhcp.eth0.mask");if (!strIp.equals("\n")) {InetAddress mask = InetAddress.getByName(strMask);InetAddress ip = InetAddress.getByName(strIp);Log.v("ws-discovery", "auto ip:" + strIp);return calcBroadcastAddress(mask, ip);} else {// 手动配置String strManual = getCommandResult("/system/bin/ifconfig", "eth0");String[] netInfo = strManual.split(" ");if (netInfo.length >= 5) {InetAddress mask = InetAddress.getByName(netInfo[4]);InetAddress ip = InetAddress.getByName(netInfo[2]);Log.v("ws-discovery", "manual ip:" + netInfo[2]);return calcBroadcastAddress(mask, ip);}}// wifiWifiManager wifi = (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE);DhcpInfo dhcp = wifi.getDhcpInfo();Log.v("ws-discovery", "wifi ip:" + Integer.toString(dhcp.ipAddress));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) & 0xFF);}return InetAddress.getByAddress(quads);}private int getIntAddress(InetAddress address) {byte[] addrs = address.getAddress();int addr = 0;addr = ((addrs[3] & 0xff) << 24) | ((addrs[2] & 0xff) << 16)| ((addrs[1] & 0xff) << 8) | (addrs[0] & 0xff);return addr;}private String getCommandResult(String commands, String args) {Process process = null;String inet = null;try {process = new ProcessBuilder().command(commands, args).redirectErrorStream(true).start();InputStream in = process.getInputStream();int count = 0;while (count == 0) {count = in.available();}byte[] b = new byte[count];in.read(b);inet = new String(b);} catch (IOException e) {e.printStackTrace();} finally {if (process != null)process.destroy();}return inet;}
(2)
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()) { if (interfaceAddress.getBroadcast() != null) { return interfaceAddress.getBroadcast().toString().substring(1);} } } } return null;}
- [Android]获取局域网广播地址的两种方法
- [Android]获取局域网广播地址的两种方法
- python 获取局域网内的广播地址
- Android获取设备的IP地址的两种方法
- 获取mac地址的两种方法
- Android /java获取系统广播地址、ip地址、子网掩码的方法
- Java获取客户端真实IP地址的两种方法
- 两种获取本机IP地址的方法
- Java获取客户端真实IP地址的两种方法
- Java获取客户端真实IP地址的两种方法
- Java获取客户端真实IP地址的两种方法
- Java获取客户端真实IP地址的两种方法
- Java获取客户端真实IP地址的两种方法
- Java获取客户端真实IP地址的两种方法
- Java获取客户端真实IP地址的两种方法
- java获取客户端真实IP地址的两种方法
- Java获取客户端真实IP地址的两种方法
- Java获取客户端真实IP地址的两种方法
- 互联网之我见谈百度
- Maven的pom.xml文件详解------More Project Information
- 求奖金数——用switch语句
- strchr函数
- 如何利用多核CPU来加速你的Linux命令 — awk, sed, bzip2, grep, wc等
- [Android]获取局域网广播地址的两种方法
- Oracle 的时区设置
- Android系统源代码下载
- mysql Dos操作
- android_布局属性大全
- Grep使用正则
- 算法习题35:求一个矩阵中最大的二维矩阵
- hdu 3371 Connect the Cities
- 软件工程师面试宝典