我的应用程序打开了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。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top