我需要能够发现本地网络上的服务(比如说我正在运行一个聊天应用程序,并且我想发现本地网络上运行此聊天的其他设备),但遗憾的是我需要能够在具有API
至少有三四个选择。
您可以使用
TCP 或 UDP
- 广播地址
- 组播地址
- 迭代网络中的所有地址
HTTP
4 利用外部服务器或 GCM(Google Cloud Messaging)之类的东西
广告1和2
Pros:
+易于实现,服务器在特定端口上的子网/网络的广播/多播地址上发送预定义的“hello”消息,客户端正在侦听该端口,当“hello”消息到达时,他会自动知道服务器IP地址(包含在包)
+不需要连接到互联网
Cons:
ad 3.
Pros:
当多播和广播被阻止时,您可以做的就是简单地迭代整个子网。这是“强力”方法,但有效,特别是在掩码为 /24 的典型家庭/小型网络上 - 只有 255 个地址可供迭代。
也不需要连接到互联网
Cons
当掩码为 /16 时,迭代所有 IP 将花费相当多的时间
可能会导致电池耗尽
并将淹没网络。
ad. 4
另一种方法是制作一些外部服务器作为设备的“定位点”。每个设备都会发送自己的地址,并查看是否有来自同一网络的其他设备的一些条目。
当然需要互联网连接。
因此,我认为从广播和多播开始是个好主意,因为它非常简单并且可以在很多地方工作,但请记住,有些网络不允许使用它。
可以在这里找到很好的参考http://docs.oracle.com/javase/tutorial/networking/datagrams/broadcasting.html
你还应该检查一下这个http://home.heeere.com/tech-androidjmdns.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)