通过网络上安装的应用程序发现计算机

时间:2012-11-28 14:29:38

标签: ios windows networking multicast bonjour

我正在尝试为iOS构建一个可以连接到运行macOS或windows的计算机的应用程序,并控制这些计算机上的一些东西。另一个应用程序将安装在这些计算机上,以便iOS上的应用程序可以连接到它们。但首先我需要发现网络中安装并运行了我的应用程序的计算机。这样做的好方法是什么?我想过使用广播,多播或者bonjour。还有其他选择吗?哪一个最适合我的情况?

我打算为macOS和windows做两个不同的应用程序,一个是目标c,另一个是c#,所以网络内容应该可用于这两个。提前致谢

1 个答案:

答案 0 :(得分:1)

到目前为止最简单的选择是使用IP / UDP广播数据包。计算机上的应用程序(运行任何操作系统)都可以在那里监听预定义的UDP端口(例如9999),当iOS设备想要“扫描”网络时,它将发送一个IP / UDP广播数据包。目的端口为9999.收到广播数据包后,计算机上的应用程序可以响应,因为它现在知道iOS设备的IP地址,你可以从那里拿东西。

处理离开网络的计算机的最简单方法是让计算机上运行的应用程序将此事实传达给iOS设备,因为它已经知道iOS设备的IP地址。但是,如果保持当前的计算机列表是至关重要的,那么某种轮询机制是不可避免的,因为计算机可能因任何原因而崩溃,而没有机会发送再见消息。

可以如下使用多播:计算机周期性地为预定义的多播组(例如224.1.1.1)发送IGMP加入,并且当设备想要“扫描”网络时,iOS设备发送目的地为224.1.1.1的多播UDP分组。计算机将接收多播UDP数据包,因为它们已加入224.1.1.1的多播组,然后计算机可以开始与iOS设备通信,因为IP地址已知。然而,这似乎过于复杂,并没有真正提供任何优势。使用组播的重点是节省带宽,但节省的带宽量将是微不足道的。除非您要从iOS设备向所有计算机发送大量相同的数据,否则没有理由沿着这条路走下去。

至于Bonjour,遗憾的是我无法发表评论,因为我对此没有任何经验,但我仍然会投票支持简单的广播以保持平台独立......好吧,至少在计算机方面。 :)