2012-05-21 124 views
3

好的,所以我明白客戶端計算機和服務器計算機之間的通信可以通過在兩臺計算機之間創建套接字來啓動,但是我看到的每個教程都取決於最終用戶知道他們希望連接的計算機的IP地址。服務器的網絡發現

但是,在本地網絡LAN遊戲中,客戶端以某種方式自動檢測服務器。這是如何完成的?客戶端是否自動檢測每個可能的IP,是否有某種「GetDetectedIPs」API等?

我正在尋找可以在標準WIN32 API中以直C實現的答案。請勿使用MFC,.NET或C++。謝謝。

回答

0

您可以讓客戶端發送一個UDP數據包給指定範圍內的每個IP,並讓服務器回答另一個UDP數據包。

+0

也許客戶端可能會廣播UDP數據包?並且服務器以單播UDP數據包進行響應。 – SKi

3

你需要的技術叫做廣播。例如,它用於BOOTP和DHCP協議。

發送一個包含廣播目標地址的數據包會導致它被LAN中的所有設備接收到。廣播地址是在其中主機標識字段填充有那些IP地址:

bcast_addr = ~netmask | my_addr; 

發現過程通常喜歡如下:

  1. 客戶端在特定的發送UDP數據報的廣播目的地地址港口。
  2. 服務器偵聽此端口並接收數據報。其他電腦丟棄它。
  3. 服務器通過普通的UDP數據報向客戶端發送有關其自身的所有必要信息。