2

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

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

Bonjour/ZeroConf 是实现这一目标的正确途径吗?(我希望它跨平台 OSX/Win/*Nix)

4

4 回答 4

2

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

于 2010-12-03T08:12:02.870 回答
2

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

这是不合逻辑的。

我假设您实际上并不是指广播,而是指单播或只是“发送”?

Bonjour/ZeroConf 是实现这一目标的正确途径吗?

这实际上取决于您的目标环境以及您的应用程序打算做什么。

正如 Ignacio 指出的那样,您需要在 Windows 上安装 Apple 软件才能让 Zeroconf/mDNS 目前正常工作。

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


然而,较大的网络可能由于各种原因禁用了第 2 层多播,此时您的应用程序可能会遇到麻烦。

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

Could be via a DHCP option, or by DNS service records.. in these cases you'd possibly be writing a queryable server to track active clients.. much like a BitTorrent Tracker.

Two things to consider while designing your networked app:

  • Would there ever be reason to run more than one "installation" of your application on a network?
  • Always consider the implications of versioning: One client is more up to date than another, can they still talk to each other or at least fail gracefully?
于 2010-12-03T09:28:54.697 回答
0

I think that ZeroConf is a very good start. You may find this document useful.

于 2010-12-03T09:32:21.587 回答
0

I have a list on a webpage, nice if you need internet communications.

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

My initial idea was to add firewall punching and all that, but I just couldn't be bothered too many of the hosts where using external IPs for it to be a problem..

But I really recommend Zeroconf, at least if you use Linux+MacOSX, don't know about Windows at all.

于 2010-12-03T11:07:35.633 回答