我正在尝试创建一个客户端/服务器应用程序(带有Windows Phone 7客户端和Windows PC服务器),可以在网络上自动发现,而无需任何中间服务器或预先存在的对等网络。我已经能够使用多播UDP为简单的发现模型创建原型客户端/服务器实现。当两台计算机配置为使用相同的WiFi网络时,此方案很有效。但是,在服务器(PC)通过以太网连接到域网络的情况下,客户端(WP7)和服务器不能再发送或接收UDP多播数据包。两者配置了不同的网关服务器,但奇怪的是,如果使用服务器的显式IP地址,它们仍然可以通过TCP / IP建立连接。
客户端/服务器在以这种方式配置的网络上自动发现时,正确的方法是什么?是否有自动发现的标准机制?这可能是网络问题还是可以在应用层中解决的问题?
任何见解都将不胜感激。
答案 0 :(得分:0)
这些是我的想法,不确定它们是否准确。 这样做UDP方式应该没问题,像Totem这样的协议依赖于UDP我猜。 UDP是网络协议也可用于自动服务发现的东西。
但是当您处理UDP无法可靠的跨域问题时,您将不得不使用TCP。 TCP将确保可靠性,但我怀疑它是否有能力进行自动发现。
我认为一个好方法可能是让服务器在LDAP等命名服务器上注册,以便客户端能够查询LDAP并获取服务器详细信息。但是,这更像是一种应用层方法。
我在产品中看到,我们使用TCP上的Gossip协议来检查分布式系统的心跳。
答案 1 :(得分:0)
多播UDP通常不会跨路由器边界传播。因此,传统是使用一些中央服务器来发现同伴。当您需要发现服务器时,事情变得更加棘手。在某些情况下,可以使用DNS(您可以将自定义记录放入DNS,并且记录将引用服务器的地址)。在Active Directory环境中,您可以使用某些AD服务器来保留类似的记录。