首页 > 代码库 > 关于Android热点模式下的UDP广播
关于Android热点模式下的UDP广播
最近尝试让easylink3在热点模式下连接,发现用普通的广播地址会报错,Network unreachable
尝试按照stackoverflow上的方法:
public static int getCodecIpAddress(WifiManager wm, NetworkInfo wifi){ WifiInfo wi = wm.getConnectionInfo(); if(wifi.isConnected()) return wi.getIpAddress(); //normal wifi Method method = null; try { method = wm.getClass().getDeclaredMethod("getWifiApState"); } catch (NoSuchMethodException e) { // TODO Auto-generated catch block e.printStackTrace(); } if(method != null) method.setAccessible(true); int actualState = -1; try { if(method!=null) actualState = (Integer) method.invoke(wm, (Object[]) null); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } if(actualState==13){ //if wifiAP is enabled return convertIP2Int("192.168.43.1".getBytes()); //hardcoded WifiAP ip } return 0; } public static int convertIP2Int(byte[] ipAddress){ return (int) (Math.pow(256, 3)*Integer.valueOf(ipAddress[3] & 0xFF)+Math.pow(256, 2)*Integer.valueOf(ipAddress[2] & 0xFF)+256*Integer.valueOf(ipAddress[1] & 0xFF)+Integer.valueOf(ipAddress[0] & 0xFF)); } private InetAddress getBroadcastAddress(WifiManager wm, int ipAddress) throws IOException { DhcpInfo dhcp = wm.getDhcpInfo(); if(dhcp == null) return InetAddress.getByName("255.255.255.255"); int broadcast = (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); }
但是发现wm.getDhcpInfo得到的mask不对,是0
这样最终广播地址会是255.255.255.255
再次修正,将mask强行变为0.0.0.255之后,可以成功进行广播
但是多播还是不行,需要继续研究
关于Android热点模式下的UDP广播
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。