首页 文章

Android:在Wifi网络上找到同行

提问于
浏览
1

我正在试图弄清楚如何搜索登录到特定端口上托管应用程序的wifi网络的其他设备 .

如何在不知道他们的地址或甚至是他们托管的端口的情况下检测这些其他设备的存在?

一旦发现,我应该能够联系设备并使用SocketChannels与它 Build 客户端 - 服务器连接 .

注意:此应用程序适用于ICS之前的Android设备 . 所以没有Wifi-Direct .

1 回答

  • 1

    您绝对可以在所有对等端侦听的已知端口上发送探测数据包进行广播(255.255.255.255) . 这是一种易于发现的老技术 . 其他包括 SSDPUPnP .

    请注意,对于UDP广播,255.255.255.255的工作原理为 only

    [添加]我更喜欢扩展我的答案而不是评论 .

    1.谁应该发起广播?

    您可以选择自己喜欢的广播模型 . 它们都是可以互换的 .

    模型1是"job offering",在我看来是我最喜欢的 . 您在服务器应用程序上打开侦听套接字,然后定期发送广告或更好的公告广播消息,告诉每个人在某个IP /端口上可以使用开放服务(该端口不需要是静态的) . 任何对通信感兴趣的对等方只需连接到指定的 endpoints 即可使用该服务 .

    模型2是"job seeking",其中服务器保持静默 . 当客户端想要连接时,它会广播通用搜索消息 . 任何可用的服务器都会收到该消息并回复(单播)或广播上述公告消息 .

    模型2a是“反求职”,其中客户端不是作为通用消息而是包括其 endpoints 来广播服务请求 . 然后,服务器连接到客户端 endpoints ,但随着客户端节点从服务器节点请求服务,协议继续 . 他们充当TCP角色的反向角色 .

    2.多久一次?

    这取决于几个因素 . 我无法帮助您选择最终的毫秒数,但我可以向您展示所有因素 . 首先,客户端应等待多长时间告诉用户扫描可用服务是否已“完成”?您可能会“立即”或“1秒钟”,但请记住,广播数据包会根据社区中可用的服务器数量使网络过载 .

    如果您选择模型1,请尽快开始侦听可用服务(即应用程序启动时),然后定期从列表中删除那些在 T*2T*3 时间范围内未收到 heartbeat (广播数据包的另一个技术名称)的服务,其中 T 是您的超时 . 手动扫描通常应该在 T*1.5T*1.2 内完成,这取决于 T 的大小

相关问题