2009-07-28 61 views
1

总之:如何可靠地发现一个(大概是多段式)局域网络,客户端零配置创建一个Windows(win32)中的服务在网络上发现

我的客户端应用程序来定位上的某个地方运行的服务器服务器应用程序不知道服务器IP地址。它必须在本地局域网上工作,该局域网可以通过集线器或其他交换设备分成多个段。

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

当客户端启动时,它会在自己的网段上发送UDP广播。如果服务器在同一个网段上运行,则它没有任何问题 - 服务器用相应的消息进行响应。

如果服务器和客户端正在由不转发UDP的hub/switch分开的网络上运行(最有可能的情况),那么我有一个服务器实例在每个段上运行,并且它们将客户端请求转发给每个其他通过TCP - 但我需要配置这个服务器实例(简单,但仍然是一个技术支持的痛苦。)这是我需要解决的主要问题。有些网站我们有数百个客户在5或6个单独的网段上运行。

我面临的问题: 1.尽管我的应用程序安装程序在防火墙上启用了适当的端口,但有时候我会遇到这种情况似乎并不正确。 2.必须在不转发UDP的集线器/交换网络上运行多个服务器实例(并因此配置和维护它们)最后,我需要一个无需维护即可在最小的Windows网络(XP/2000) 2000/Vista),可能没有配置Active Directory或其他查找服务。

我不想标记任何运行时的东西 - 应该可以用普通的VC++或Delphi来完成。

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

在此先感谢。

+0

在upnp.org或许有一个如何做到这一点的提示? – djangofan 2009-10-12 19:09:24

回答

1

你有几个术语问题:

  • 如果你说“网段”你似乎意味着“IP子网”。同一网段上的设备可以看到相同的IP广播。
  • 你在哪里说“hub/switch”,你显示的是“IP router”。
  • 你说什么“不会转发UDP”,问题实际上是“不会转发IP广播”。

在那之后,你有几种选择:

  • 你的服务器可以在DNS下一个众所周知的名称注册自己,如果你有一个允许动态DNS更新的DNS服务器。您应该使用RFC2782中指定的SRV记录。客户端然后通过DNS查找来查找服务器。
  • 您可以在组织的DNS中静态分配您的服务器的知名名称,也许与之前的选项一样使用SRV记录。
  • 如果您的路由器支持IP多播,则您的服务器可以加入IP多播组。然后,客户端将它们的初始发现请求作为UDP数据包发送到(预先规定的)多播地址。
+0

我想你说的是混淆术语,谢谢你纠正我:-)。多播是我想到的,但不知道会工作。我想这将是最好的选择。必须尝试一下。 – 2009-12-21 20:44:55

0

如果你有域名服务器,我会选择小服务。您可以与其他服务连接并将其用作分发点。

为什么域名服务器?找到它的名字比较容易(DsGetDcName)。

其他选择将包括DHCP服务器,DNS服务器或类似的东西,需要由维护人员填写。

+0

无域服务器。我应该在问题中提到这一点。它应该在一个工作组上工作。 – 2009-08-01 07:32:20

相关问题