2012-02-06 42 views
7

我正在开发在局域网上的几台不同计算机上运行的网络应用程序。核心需求之一是应用程序保留过去与之通信的局域网上的对等体列表,以便它可以恢复以前的会话。天真的解决方案是只记住IP并将其存储在一张表中,但当对等体的IP发生变化时会发生什么?需要什么使主机名解析在LAN上工作?

相反,我想我会保存对等主机名,所以即使IP发生更改,它们仍然可以通过主机名访问。 (我知道主机名可以改变,但这已经足够好了)。

所以我的问题是什么需要使混合的Windows/Mac/Linux客户端的局域网解析工作主机名称?

+0

如果这是在公司网络上,您可以使用DNS服务器注册您的主机名。如果您位于专用LAN上,则可以在单个子网LAN上使用此应用程序,也可以将这些应用程序分割为不同的广播域。 (单独的子网)您的网络将是什么样子? – resmon6 2012-02-06 15:34:06

+0

该应用程序将运行在单个子网LAN中。但它将被部署到成千上万个不同的客户,在他们自己的局域网内。所以我不能对他们正在使用的路由器或可用的网络服务做出假设。 – lms 2012-02-06 15:53:33

回答

6

如果不使用中央权威机构,唯一可靠的方法就是通过使用zerconfiguration名称解析。这意味着如果没有多播路由器,您将只能动态解析与解析主机位于同一子网的对等体。你可以使用像bonjour这样的mac,netbios或ssdp for windows或avahi for linux,但是你不能假设这些是启用的。我可能会忽略一些更流行的协议来执行这个功能,但我会亲自为您的应用程序提供一个快速的udp广播名称解析协议。看看这些对于一些更多的想法:

Zeroconf Name resolution

Universal local network name resolution method without DNS?

http://en.wikipedia.org/wiki/Zero_configuration_networking#Name_resolution

http://en.wikipedia.org/wiki/Broadcast_address#IP_networking

我会选择一个特定的UDP端口上监听(可以说12000)和那么当你准备好解析主机时,在端口12000上发送一个“hello”udp数据包到255.255.255.255,并且运行你的应用的网络上的所有其他主机应该回复包含其主机名的数据包,可能还有其他信息。