Android发现局域网IP
来源:互联网 发布:淘宝快速批量上传宝贝 编辑:程序博客网 时间:2024/06/06 14:01
Android发现局域网IP的原理就在于通过udp向路由网关广播消息,然后监听对应的消息回复。示例代码如下:
1、获取udp广播地址
public static InetAddress getBroadcastAddress(Context pContext) throws UnknownHostException { WifiManager cWifi = (WifiManager)pContext.getSystemService(Context.WIFI_SERVICE); DhcpInfo cDhcp = cWifi.getDhcpInfo(); if(cDhcp==null) { return InetAddress.getByName("255.255.255.255"); } int cBroadcast = (cDhcp.ipAddress & cDhcp.netmask) | ~cDhcp.netmask; byte[] cQuads = new byte[4]; for (int k = 0; k < 4; k++) cQuads[k] = (byte) ((cBroadcast >> k * 8) & 0xFF); return InetAddress.getByAddress(cQuads);}
2、根据广播地址创建udp发送和监听机制
public static DatagramSocket mSocket;public static DatagramPacket mPacket;
public static String startFind(InetAddress cAddr){String cIP = "";try {mSocket = new DatagramSocket(8000);mSocket.setBroadcast(true);byte[] cBuffer = "Hello World".getBytes();DatagramPacket cPacket = new DatagramPacket(cBuffer,cBuffer.length);cPacket.setAddress(cAddr);cPacket.setPort(9999);mSocket.send(cPacket);while(true){cIP = receiveData();if(null != cIP)break;}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();cIP = null;}mSocket.close();return cIP;}
public static String receiveData(){byte[] cReceivedata = new byte[1024];DatagramPacket cPacket = new DatagramPacket(cReceivedata,cReceivedata.length);cPacket.getAddress();try{if (mSocket == null){Log.e("dataSocket", "null");}mSocket.receive(cPacket);}catch(IOException e){e.printStackTrace();}if(0 != cPacket.getLength()){String cCheck = new String(cReceivedata,0,cPacket.getLength());Log.i("findIP", cCheck);if(cCheck.equals("HelloWorldACK")){Log.i("findIP", cPacket.getAddress().getHostAddress());return cPacket.getAddress().getHostAddress();}}return null;}
注意:在Android中不能在app主线程中进行socket资源的动作,至于原因,相信会android的人都知道
阅读全文
0 0
- Android发现局域网IP
- 局域网内android设备发现及通讯
- Android 扫描wifi局域网ip
- Android 扫描wifi局域网ip
- 郁闷,局域网中发现了不明IP地址
- Android获取公网IP以及局域网IP
- Android 获取在局域网内的IP
- 局域网IP
- 局域网ip
- 发现局域网所有主机
- 自动扫描局域网并且发现指定端口开放的主机ip的shell脚本
- android 获取局域网内其他手机的ip
- android应用开发之判断wifi下局域网IP
- Android:手机扫描局域网所有ip,并进行socket通讯
- android应用开发之判断wifi下局域网IP
- Android获取局域网所有设备的ip地址
- 如何获取Android手机连接网络的当前局域网IP
- Android获取本机局域网IP的方法
- c++知识点
- 动态代理
- OpenStack Pike 版本中的 55 个新功能盘点
- myeclipse提示Failed to create the part's controls
- LSTM模型分析及对时序数据预测的具体实现(python实现)
- Android发现局域网IP
- SpringBoot Log4j2日志分级输出
- 整合微服务的简单定义
- Hadoop快速入门
- Charles从入门到精通
- windows配置SDL出现无法解析的外部符号 _main,该符号在函数 ___tmainCRTStartup 中被引用
- unity学习笔记#4--读取XML数据用于人物间对话
- 注册soe莫名失败
- bootstrap table中cellStyle以及formatter的问题