API 14之前的Android网络发现服务(ish)

sie*_*nko 2 networking android discovery

我需要能够发现本地网络上的服务(所以说我正在运行聊天应用程序,我想发现运行此聊天的本地网络上的其他设备),但遗憾的是我需要能够在设备上使用它API <16(所以我不能使用android.net.nsd)我确信这可以在不使用NSD API的情况下完成.问题是如何.有帮助吗?

MP2*_*P23 11

至少有三个或四个选项.

您可以使用

TCP或UDP

  1. 广播地址
  2. 组播地址
  3. 迭代网络中的所有地址

HTTP

4使用外部服务器或类似GCM(Google Cloud Messaging)

ad.1和2

优点:

+易于实现,服务器在特定端口上的子网/网络的广播/多播地址上发送预定义的"hello"消息,客户端正在侦听该端口,当"hello"消息到达时,他自动知道服务器IP地址(包含在包)

+不需要连接到Internet

缺点:

  • 一些公共网络阻止该地址以避免攻击(例如洪泛).

广告3.

优点:

当多播和广播被阻止时,您可以做的只是遍历整个子网.它是"强力"方法,但是有效,特别是在掩码为/ 24的典型家庭/小型网络中 - 只有255个地址可以迭代.

也不需要连接到Internet

缺点

当掩码被假设为/ 16时,迭代所有IP将花费相当多的时间

会导致电池耗尽

并将洪水网络.

广告.4

另一种方法是使一些外部服务器成为设备的"定位点".他们每个人都发送自己的地址,并查看来自同一网络的其他设备是否有某些条目.

当然需要互联网连接.

因此,我认为从广播和多播开始是个好主意,因为它非常简单并且可以在很多地方使用,但请记住,有些网络不允许使用.

可以在http://docs.oracle.com/javase/tutorial/networking/datagrams/broadcasting.html找到很好的参考资料.

您还应该查看这个http://home.heeere.com/tech-androidjmdns.html