我正在编写的Android应用程序有两个问题.

我正在从/ proc / net / arp中读出本地arp表,并在哈希映射中保存ip和相应的mac地址.看我的功能.它运作正常.

/**

* Extract and save ip and corresponding MAC address from arp table in HashMap

*/

public Map createArpMap() throws IOException {

checkMapARP.clear();

BufferedReader localBufferdReader = new BufferedReader(new FileReader(new File("/proc/net/arp")));

String line = "";

while ((line = localBufferdReader.readLine()) != null) {

String[] ipmac = line.split("[ ]+");

if (!ipmac[0].matches("IP")) {

String ip = ipmac[0];

String mac = ipmac[3];

if (!checkMapARP.containsKey(ip)) {

checkMapARP.put(ip, mac);

}

}

}

return Collections.unmodifiableMap(checkMapARP);

}

>第一个问题:

我也在使用广播接收器.当我的应用程序收到状态WifiManager.NETWORK_STATE_CHANGED_ACTION时,我检查是否建立了与网关的连接.如果为true,我调用我的函数来读取arp表.但是在这个阶段,系统还没有构建arp表.有时当我收到连接状态时,arp表是空的.

有人有想法解决这个问题吗?

>第二个问题:

我想以持久的方式保存网关的ip和mac地址.现在我正在使用Shared Preferences.也许写入内部存储更好?

有小费吗?

解决方法:

对于第一个问题,您可以在睡眠一段时间之后启动一个运行该方法的新线程,或者直到它有一些条目(使用邮箱创建Runnable以获取Map) – 除非您需要直接使用地图,那么我认为唯一的方法是等待参赛作品.例如(如果您需要直接使用地图):

public Map createArpMap() throws IOException {

checkMapARP.clear();

BufferedReader localBufferdReader = new BufferedReader(new FileReader(new File("/proc/net/arp")));

String line = "";

while ((line = localBufferdReader.readLine()) == null) {

localBufferdReader.close();

Thread.sleep(1000);

localBufferdReader = new BufferedReader(new FileReader(new File("/proc/net/arp")));

}

do {

String[] ipmac = line.split("[ ]+");

if (!ipmac[0].matches("IP")) {

String ip = ipmac[0];

String mac = ipmac[3];

if (!checkMapARP.containsKey(ip)) {

checkMapARP.put(ip, mac);

}

}

} while ((line = localBufferdReader.readLine()) != null);

return Collections.unmodifiableMap(checkMapARP);

}

标签:java,android

来源: https://codeday.me/bug/20190709/1412401.html

java 获取arp表,java – Android arp表 – 开发问题相关推荐

  1. java获取系统信息:java的信息、操作系统的信息、用户的信息、虚拟机的信息、系统设置的信息。

    全栈工程师开发手册 (作者:栾鹏) java教程全解 java获取系统信息:java的信息.操作系统的信息.用户的信息.虚拟机的信息.系统设置的信息. package com.lp.app.windo ...

  2. Java获取项目当前请求的全部URL,Java获取Referer,Java获取完整链接地址URL

    Java获取项目当前请求的全部URL,Java获取Referer,Java获取完整链接地址URL >>>>>>>>>>>>> ...

  3. java获取下月末,java获取每月月末日期

    java获取每月月末日期 比如要获取20140831 20140731 20140228 等等,并将结果放入到SELECT表单中. 项目中只需要获取两年即可,所以参数可自行修改. Calendar c ...

  4. java 获取键盘事件,java获取键盘事件

    本人认为,实现它其实最 简单的莫属一个类,Java 本身就提供的,这个类就是 Scanner.先举个例子如下: import java.util.Scanner; /** * 测试从键盘读取用户的.. ...

  5. java 获取数据源_J2EE java 获取数据源

    package com.tobacco.ermsuite.interfaces.util; import java.sql.Connection; import java.sql.SQLExcepti ...

  6. java 获取file后缀,Java获取文件后缀的方法

    在对文件进行操作的时候,我们经常需要用到文件的后缀.但是Java API中并没有提供获取文件后缀的方法.下面的工具方法可以帮助我们实现这个目的. 方法1 代码示例: package org.4spac ...

  7. java获取当前年份(java获取当前年份后两位)

    html标题中怎么动态显示当前年份例如标题:XXX2012年X? 请看标题,qq:912305899 JAVA什么时候会获取数据? 根据设计或应用程序复杂度的不同,这些Bean可以是自包含的并具有持续 ...

  8. java获取当前年月日(java获取当前年月日时分秒毫秒)

    java如何获取当前时间 年月日 时分秒 //得到long类型当前时间 long l = System.currentTimeMillis(); //new日期对象 Date date = new D ...

  9. java获取微秒时间,java获取当前时间微秒

    ()为获取当前系统时间,也可使用当前时间戳 获取时间戳三种方法执行效率比较: import java.util.Calendar; import java.util.Date; public clas ...

  10. Android在Java获取组件,在Java中解析HTML以获取Android应用

    小编典典 这是我要怎么做: StringBuffer text = new StringBuffer(); HttpURLConnection conn = null; InputStreamRead ...

最新文章

  1. BCP BIA DRP 灾后业务连续性方案简述
  2. YTU_3137: 动态规划基础题目之拦截导弹
  3. 复读数组(nowcoder 1103A)
  4. 劲爆ORACLE优化,你不必是专家
  5. 如何在博客上添加小游戏【原创】
  6. mysql存储过程详解 mysql存储过程和函数
  7. 1788:Pell数列
  8. Could not get constructor for org.hibernate.persister.entity.SingleTableEntityPersister
  9. 超大流量分布式系统架构解决方案 人人都是架构师2.0
  10. 桌面图标分类软件Fences的缺点
  11. 网红超火罗马桌面时钟效果
  12. Linux中压缩解压工具使用
  13. 从程序员到项目经理(一)
  14. 【S2VD】S2VD半监督视频降雨方法(Semi-Supervised Video Deraining with Dynamical Rain Generator)论文学习
  15. IELTS Lexical Resources - Reading 1 social problem
  16. 2007-01-22 日志——让泪化作相思雨
  17. java俄罗斯方块程序_使用JAVA编写的俄罗斯方块程序, 具有非常全面的功能.
  18. Open3D点云库 C++学习笔记
  19. 工业超纯水机应用反渗透膜优势
  20. backtrack5的安装配置

热门文章

  1. Cocos2d_iphone游戏开发_视频教程__国内顶级专业IOS培训机构__(内部资料不外传)
  2. java string 截取_java string 怎样截取前n个字符?的解决方案列表
  3. Java String截取
  4. mac 改变终端字体颜色
  5. scp 传输文件指定端口、传输目录
  6. Gazebo仿真--URDF与SDF的区别
  7. CorelDRAW中网状填充工具该怎么使用
  8. mysql实习生笔试题_2011甲骨文Oracle实习生笔试题目
  9. Java编程题:井底一只青蛙,白天向上爬5米,晚上向下掉3米,写出在任意井高都能准确算出爬行天数的程序
  10. python抽样方法概述