使用Python在LAN上发布和查找服务的正确方法
-
30-09-2019 - |
题
我的应用程序打开了TCP套接字,并使用同一应用程序等待网络上其他用户的数据。同时,它可以将数据广播到网络上的指定主机。
当前,我需要手动输入目标主机的IP以便发送数据。我希望能够找到运行该应用程序的所有主机的列表,并将其选择用于广播数据的用户选择。
Bonjour/Zeroconf是实现这一目标的正确路线吗? (我希望它能跨平台OSX/Win/*NIX)
解决方案
它可以将数据广播到网络上的指定主机
这是一个非序列。
我认为您实际上并不意味着广播,您的意思是 单播 还是只是“发送”?
Bonjour/Zeroconf是实现这一目标的正确路线吗?
这实际上取决于您的目标环境以及您的应用程序要做什么。
正如Ignacio指出的那样,您需要在Windows上安装Apple软件以供Zeroconf/MDNS工作。
这可能适合小型办公室 /家庭使用。
但是,由于各种原因,较大的网络可能会导致第2层多播残疾人,此时您的应用程序可能会遇到麻烦。
如果您希望它在企业环境中工作,则需要进行一些配置,但这不必在边缘(在应用程序客户端实例中)完成。
可以通过DHCP选项,也可以通过DNS服务记录。在这些情况下,您可能会编写可查询服务器来跟踪活动客户端..就像Bittorrent Tracker一样。
设计网络应用程序时需要考虑的两件事:
- 是否有理由在网络上运行您的应用程序的多个“安装”?
- 始终考虑版本控制的含义:一个客户比另一个客户更最新,他们仍然可以互相交谈还是至少优雅地失败?
其他提示
在这种情况下,Zeroconf/DNS-SD是一个好主意。它是由Bonjour在OS X和Windows上提供的(但必须单独安装或作为Windows上的Apple产品的一部分)以及Avahi在Foss *Nix上。
我认为zeroconf是一个很好的开始。您可能会发现 这个文件 有用。
我在网页上有一个列表,如果您需要Internet通信,我很不错。
<dl_service updated="2010-12-03 11:55:40+01:00">
<client name="internal" ip="10.0.23.234" external_ip="1.1.1.1"/>
<client name="bigone" ip="2.2.2.2" external_ip="2.2.2.2">
<messsage type="connect" from="Bigone" to="internal" />
</client>
</dl_service>
我最初的想法是添加防火墙打孔器等等,但是我只是无法打扰太多的主机,因为使用外部IPS以使其成为问题。
但是我真的建议Zeroconf,至少如果您使用Linux+MacOSX,完全不知道Windows。