首页 > 代码库 > 关于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广播