社区
Android
帖子详情
Android设备如何知道wifi局域网内有多少台主机?
a220315410
2011-06-29 06:54:49
Android设备应该通过何种方式,才能枚举局域网内的所有主机(这里的主机主要是指Android设备)呢?靠发送广播么?还是framework层有提供相关的API支持?还是必须依赖于native层的开发?
...全文
2274
13
打赏
收藏
Android设备如何知道wifi局域网内有多少台主机?
Android设备应该通过何种方式,才能枚举局域网内的所有主机(这里的主机主要是指Android设备)呢?靠发送广播么?还是framework层有提供相关的API支持?还是必须依赖于native层的开发?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
iewell
2013-11-28
打赏
举报
回复
希望楼主能给个demo,如何解决这个问题的 十分感谢!iewell@qq.com
小怪兽打葫芦娃
2013-07-15
打赏
举报
回复
楼主能给一个demo吗?我也在做这个 512573717@qq.com
a220315410
2011-07-11
打赏
举报
回复
最终还是选择了udp广播。
虽然异步socket连接的速度的确比阻塞型的快很多,但是,还是架不住网络糟糕的情况啊。扫一下全部子网IP地址(254个),慢的时候要一分钟的样子,吃不消啊。
a220315410
2011-07-01
打赏
举报
回复
[Quote=引用 9 楼 fontlose 的回复:]
操作有点频繁和占资源了,如果你有路由密码和路由支持IP查询的话直接打开路由页面获取网页就行了
比如可以直接可以获取http://192.168.2.1/DEV_device.htm
[/Quote]
这个很难保证。。。。。。因为公司的环境只是开发环境,以后的运行环境会怎么样,难说啊
fontlose
2011-07-01
打赏
举报
回复
操作有点频繁和占资源了,如果你有路由密码和路由支持IP查询的话直接打开路由页面获取网页就行了
比如可以直接可以获取http://192.168.2.1/DEV_device.htm
a220315410
2011-07-01
打赏
举报
回复
[Quote=引用 7 楼 fontlose 的回复:]
恩 这个还是要真机实际测才行
[/Quote]
我使用的一直是真机。
不过,公司的wifi网络好像真的不是很好,两台平板电脑互ping的时候,经常出现1000毫秒以上的延迟。
目前关于如何获知局域网内的其他设备,我有两个方案:
1.UDP广播,AP在运行的过程中,不停的发送UDP广播(例如每一秒钟一次),然后接收端每10秒检查一次收到的广播包,如果发现过去的10秒钟内接受到过某个IP发送的广播包,则认为这个IP所在的机器上正在运行我的AP(简单的来说,就是这个机器在线),接收端可以和它通信。考虑到网络的丢包率的话,可以提高发送端的发送频率或者增大接收端的扫描间隔,来提高可靠性。
2.使用TCP轮询。通过本机IP和子网掩码,计算本子网内所有可能的IP地址,轮询这些IP地址,尝试Socket.connect(SocketAddress remoteAddr, int timeout)来进行连接,能连上则认为机器在线。超时则判断机器离线。不过,这种情况下,timeout的值设置得小的话,则在网络情况不佳(就以我们公司的wifi网络为例),容易遗漏设备,timeout值设置过大,则轮询花费的时间太多。TCP的好处在于丢包的问题得以解决,但是轮询太费时间,利用多线程的话,的确可以缩短轮询时间,但是造成的负荷又太大。
有谁能给我个更好的方案啊?
fontlose
2011-07-01
打赏
举报
回复
恩 这个还是要真机实际测才行
a220315410
2011-07-01
打赏
举报
回复
昨天尝试了udp广播,udp本来就是不可靠的协议,再加wifi无线网络的不可靠性,根据我的试验,在我们公司的wifi网络下,基本丢包率在50%上下,真的不是很靠谱。。。
a220315410
2011-06-30
打赏
举报
回复
我使用的就是真机,看样子如你所说,的确要装busybox了。
现在,通过google提供的WifiManager类,我已经可以获取当前设备的IP,网关,和子网掩码。这样的话,我已经可以计算出,当前局域网内所有可能的IP地址。
不过使用ping 和 arp -a 这意味着我需要新建一大堆的进程(每ping一次,一个进程,加上arp的进程,假设子网掩码为255,255,255,0,那样的话,总计创建了256条进程),这种方案是不是对于性能不利呢?
fontlose
2011-06-29
打赏
举报
回复
[Quote=引用 2 楼 a220315410 的回复:]
arp -a命令是显示本机的ARP缓存表,如果设备不曾连接过局域网内的其他设备的话,arp -a除了返回路由器,别的地址应该都不会返回吧?
而且我使用"adb shell arp" 的结果是arp not found。
[/Quote]
是的 所以前面要一个一个ip试这ping,最后把arp -a就可以显示到在线的ip了
arp not found。不要用模拟器,用真机试试。我用开发板有arp命令。没有就要装busybox了,有很多linux的常用命令
jeky_zhang2013
2011-06-29
打赏
举报
回复
没用过WIFI ,帮顶下
a220315410
2011-06-29
打赏
举报
回复
[Quote=引用 1 楼 fontlose 的回复:]
在双方没协议的情况下 试试循环Runtime.getRuntime().exec("ping "+ip+"-i 1 -c 2");ping每个IP
Runtime.getRuntime().exec("arp -a >"+savefile);再去处理savefile这个文件
另外就是发送udp广播了,请求方将自身ip和命令广播出去,设备收到命令将自身ip用tcp/udp发送给请求方。
……
[/Quote]
arp -a命令是显示本机的ARP缓存表,如果设备不曾连接过局域网内的其他设备的话,arp -a除了返回路由器,别的地址应该都不会返回吧?
而且我使用"adb shell arp" 的结果是arp not found。
fontlose
2011-06-29
打赏
举报
回复
在双方没协议的情况下 试试循环Runtime.getRuntime().exec("ping "+ip+"-i 1 -c 2");ping每个IP
Runtime.getRuntime().exec("arp -a >"+savefile);再去处理savefile这个文件
另外就是发送udp广播了,请求方将自身ip和命令广播出去,设备收到命令将自身ip用tcp/udp发送给请求方。
每个设备要建立Socket监听广播才可以。
Android
WiFi
Tools v3.5.1 build 129
局域网
扫描工具高级版
WiFi
Tools工具具有简单、直观的界面,因此您可以在几秒钟内收到有关您网络的完整信息,找出内部或外部IP(具有“我的IP”功能)、SSID、BSSID、广播地址、网关、网络掩码、国家、地区、城市、提供商的地理坐标...
基于
Android
的udp聊天工具
并加入了发送超时以及用户是否在线的心跳测试...5)该程序仅仅在
局域网
内验证有效。非
局域网
环境如3G网络手机端接收不到服务的UDP数据包,目前该问题正在解决中,如有
知道
的大侠请指教。 6)本人联系方式:QQ54476167
海思平
台
上USB
WIFI
的移植与
局域网
无线调试和视频流预览-第5/11季视频课程
本季课程在开发板上移植USB
WIFI
模块(套装附带的MT7601模块),工作在ap模式下,并且用电脑通过
WIFI
去连接开发板实现
主机
和开发板的无线网络
局域网
通信,这样就可以用
WIFI
网络取代板载ethernet有线网络方式来进行...
android
+判断
局域网
,
android
如何判断两
台
设备
在同一个
局域网
内
android
如何判断两
台
设备
在同一个
局域网
内目录
android
如何判断两
台
设备
在同一个
局域网
内第一种方法,比较(ip与netMask)的值第二种方法,根据TTL跳数判定在不在同一个
局域网
判断两
台
设备
在不在同一个
局域网
内有
两种...
Android
局域网
通讯和查找
局域网
中的指定
设备
由于最近项目中需要做电视与手机之间的文件互传功能,首先想到的是分享热点,彼此建立
局域网
连接使用Socket来传输文件,在其中遇到一个问题,手机端需要扫描
局域网
内可以彼此建立连接的电视,根据网上查找可以通过...
Android
80,362
社区成员
91,291
社区内容
发帖
与我相关
我的任务
Android
移动平台 Android
复制链接
扫一扫
分享
社区描述
移动平台 Android
android
android-studio
androidx
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章