1

简而言之:如何可靠地发现在零客户端配置的(可能是多分段的)局域网上某处运行的服务器

我的客户端应用程序必须在不知道服务器 IP 地址的情况下找到服务器应用程序。它必须在本地 LAN 上工作,该 LAN 可以通过集线器或其他交换设备分成多个部分。

我已经有了一个可行的解决方案,但是让它在多段网络上工作有点麻烦。它的工作原理如下:

当客户端启动时,它会在自己的网段上发送 UDP 广播。如果服务器在同一段上运行,则它可以正常工作 - 服务器使用适当的消息进行响应。

如果服务器和客户端运行在由不会转发 UDP(最可能的情况)的集线器/交换机分隔的网络上,那么我在每个段上运行一个服务器实例,它们通过 TCP 将客户端请求相互转发 -但我需要为服务器实例配置它(简单,但对技术支持来说仍然很痛苦。)这是我需要解决的主要问题。在某些网站上,我们有数百个客户端在 5 或 6 个独立的细分市场上运行。

我面临的问题: 1. 虽然我的应用程序安装程序在防火墙上启用了适当的端口,但有时我会遇到这种情况似乎没有正确发生的情况。2. 必须在不转发 UDP 的集线器/交换网络上运行多个服务器实例(因此配置和维护它们)

最后,我需要一个无需维护即可在可能没有配置 Active Directory 或其他查找服务的最小 Windows 网络(XP / 2000 / Vista)上工作的解决方案。

我不想为此标记任何运行时的东西——应该可以用普通的 VC++ 或 Delphi 来做。

商业应用程序通常采用哪些方法?我知道 SQL Server 使用广播和 NetBEUI 调用的组合(我可能错了)。

提前致谢。

4

2 回答 2

1

您有一些术语问题:

  • 您说“网段”的地方似乎是指“IP子网”。同一网段的设备可以看到相同的IP广播。
  • 在您说“集线器/交换机”的地方,您的意思是“IP 路由器”。
  • 在您说“不会转发 UDP”的地方,问题实际上是“不会转发 IP 广播”。

一旦我们克服了这一点,您有几个选择:

  • 如果您的 DNS 服务器允许动态 DNS 更新,您的服务器可以在 DNS 中以众所周知的名称注册自己。您可能应该使用RFC2782中指定的 SRV 记录。然后客户端进行 DNS 查找以找到服务器。
  • 您可以在组织的 DNS 中静态地为您的服务器分配众所周知的名称,可能与之前的选项一样使用 SRV 记录。
  • 如果您的路由器支持 IP 多播,您的服务器可以加入 IP 多播组。然后,客户端将其初始发现请求作为 UDP 数据包发送到(预定的)多播地址。
于 2009-07-28T05:55:46.827 回答
0

如果您有域服务器,我会使用小型服务。您可以将其他服务连接到它并将其用作分发点。

为什么是域服务器?查找它的名称(DsGetDcName)相对容易。

其他选择包括 DHCP 服务器、DNS 服务器或无论如何都需要由维护人员填写的那种。

于 2009-07-28T05:48:19.570 回答