我想在客户端 - 服务器模型中创建应用。所以我写了桌面服务器和移动客户端库。现在我遇到一些问题,从Android设备自动发现LAN网络中的PC/Mac电脑。Android:客户端 - 服务器使用TCP,并发现局域网上的PC/Mac(WiFi)
可能的解决方案:
获得Android设备的IP地址,获得子网掩码,用
org.apache.commons.net.util.SubnetUtils
类getInfo().getAllAddresses()
和扫描它们全部采用InetAddress.isReachable(timout=1000ms)
该解决方案的工作,但如果我们有乐观的子网掩码为255.255.255.0,必须扫描254个地址,需要254秒=> 4分钟。好吧,我可以使用线程,也许增加10个线程和分裂这个任务来检查大约26个IP地址可以使其在< 45秒以下。但也可以有子网掩码255.255.0.0(不太可能,但是...)。Android没有
arp -a
命令行工具,但它有类似/proc/net/arp
这样的文件吗?我正在阅读这个文件,并且可以非常快速地在局域网中获得一些IP地址,我可以拒绝没有真正MAC的IP地址,但是00:00:00:00:00:00
。我也可以找到该设备的供应商也使用一些API,本地数据库? 问题是,我读过这个文件有一些缺陷,如包含不存在的设备(在他们断开连接后)?并非所有设备实际连接?这样对吗?所以我可以继续吗?
以上两种解决方案都只能查找IP地址,我的服务器应用的端口号是多少。好吧,我可以使用固定的端口号(但它可以被其他服务使用,然后会有问题)。也许尝试从xxxx端口号如xxxx + 1,xxxx + 2,...等连续地址到我找到一些我可以更正的时刻。所以这个连接可能需要我花费合理的时间。
- 我已阅读关于NSD或DNS-SD: https://developer.android.com/training/connect-devices-wirelessly/nsd.html 这似乎使能寄存器某些服务(在我的情况下我的服务器侧应用程序)并使其在被发现本地网络由其他设备?这在PC/MacOS服务器应用程序注册发现的情况下是可用的,Android应用程序使用NSD找到此服务?
当我有IP地址时,我如何获取设备的名称: 即此处显示的名称“Play Internet 4G ...”,这是我的无线路由器。
或在此显示