博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于Android热点模式下的UDP广播
阅读量:6381 次
发布时间:2019-06-23

本文共 2225 字,大约阅读时间需要 7 分钟。

最近尝试让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之后,可以成功进行广播

但是多播还是不行,需要继续研究

update ----------------------

多播也ok了,参考这篇文章:https://plus.google.com/+Chainfire/posts/9NMemrKYnCd

在热点模式下,默认的networkinterface是不对的,需要使用MulticastSocket::setNetworkInterface()来指定wlan作为多播interface

 

转载于:https://www.cnblogs.com/TLightSky/p/4192862.html

你可能感兴趣的文章
【本人秃顶程序员】MySQL 全表 COUNT(*) 简述
查看>>
centos7中使用febootstrap自制一个基础的centos 7.2的docker镜像
查看>>
C#开发Unity游戏教程之判断语句
查看>>
安装 SharePoint Server 2007
查看>>
linux centos 7 网卡突然不能上网异常解决
查看>>
DedeCMS操作基础(一)
查看>>
实现MySQL允许远程连接
查看>>
Java Outputstream to String
查看>>
RS232C串口通信接线方法(三线制)
查看>>
Android 自定义View属性相关细节
查看>>
type already defined error in Eclipse
查看>>
OSA 安装
查看>>
先安装.Framework然后再安装IIS,ASP.NET程序不能运行
查看>>
NPOI Excel下拉项生成设置
查看>>
360该不该拍?
查看>>
用Xib创建控制器
查看>>
oracle的sqlplus和dos的中文乱码问题
查看>>
LVS+keepalived高可用负载均衡集群部署(二)---LAMP网站服务器与LVS服务器
查看>>
Struts2之简单数据类型转换
查看>>
python 打印数字
查看>>