我的应用程序打开一个 TCP 套接字并等待来自网络上使用同一应用程序的其他用户的数据。同时,它可以向网络上的指定主机广播数据。
目前,我需要手动输入目标主机的 IP 才能发送数据。我希望能够找到运行应用程序的所有主机的列表,并让用户选择将数据广播到哪个主机。
Bonjour/ZeroConf 是实现这一目标的正确途径吗?(我希望它跨平台 OSX/Win/*Nix)
我的应用程序打开一个 TCP 套接字并等待来自网络上使用同一应用程序的其他用户的数据。同时,它可以向网络上的指定主机广播数据。
目前,我需要手动输入目标主机的 IP 才能发送数据。我希望能够找到运行应用程序的所有主机的列表,并让用户选择将数据广播到哪个主机。
Bonjour/ZeroConf 是实现这一目标的正确途径吗?(我希望它跨平台 OSX/Win/*Nix)
Zeroconf/DNS-SD 在这种情况下是一个绝妙的主意。它由 Bonjour 在 OS X 和 Windows 上提供(但必须在 Windows 上单独安装或作为 Apple 产品的一部分安装),由 Avahi 在 FOSS *nix 上提供。
它可以将数据广播到网络上的指定主机
这是不合逻辑的。
我假设您实际上并不是指广播,而是指单播或只是“发送”?
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:
I think that ZeroConf is a very good start. You may find this document useful.
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.