使用Python在LAN上发布和查找服务的正确方法

时间:2010-12-03 08:07:40

标签: python networking bonjour zeroconf

我的应用程序打开一个TCP套接字,并使用同一个应用程序等待网络上其他用户的数据。同时,它可以将数据广播到网络上的指定主机。

目前,我需要手动输入目标主机的IP才能发送数据。我希望能够找到运行该应用程序的所有主机的列表,并让用户选择将数据广播到哪个主机。

Bonjour / ZeroConf是完成此任务的正确途径吗? (我希望它能跨平台OSX / Win / * Nix)

4 个答案:

答案 0 :(得分:2)

在这种情况下,Zeroconf / DNS-SD是一个很好的主意。它由Bonjour在OS X和Windows上提供(但必须单独安装或作为Windows产品的一部分安装在Windows上),并由Avahi在FOSS * nix上提供。

答案 1 :(得分:2)

  

它可以将数据广播到网络上的指定主机

这是一个不引用的问题。

我认为你实际上并不是指广播,你的意思是Unicast或只是“发送”?

  

Bonjour / ZeroConf是完成此任务的正确途径吗?

这实际上取决于您的目标环境以及您的应用程序要执行的操作。

正如Ignacio指出的那样,您需要在Windows上安装Apple软件,以便Zeroconf / mDNS立即工作。

这可能适合小型办公室/家庭使用。


但是,由于各种原因,较大的网络可能会禁用第2层多播,此时您的应用可能会出现问题。

如果您希望它在企业环境中工作,则需要进行一些配置,但不必在边缘(在应用程序客户端实例中)完成。

可以通过DHCP选项或DNS服务记录..在这些情况下,您可能正在编写可查询服务器来跟踪活动客户端..就像BitTorrent跟踪器一样。

设计联网应用时需要考虑两件事:

  • 是否有理由在网络上运行多个“安装”您的应用程序?
  • 始终考虑版本控制的含义:一个客户端比另一个客户端更新,它们是否仍能相互通信或至少优雅地失败?

答案 2 :(得分:0)

我认为ZeroConf是一个非常好的开始。您可能会发现this document有用。

答案 3 :(得分:0)

我在网页上有一个列表,如果您需要互联网通信,那就太好了。

<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>

我最初的想法是添加防火墙冲击和所有这些,但我不能打扰太多使用外部IP的主机,因为它是一个问题..

但我真的推荐Zeroconf,至少如果你使用Linux + MacOSX,根本不了解Windows。