2009-07-28 64 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

相關問題