好的,所以我明白客戶端計算機和服務器計算機之間的通信可以通過在兩臺計算機之間創建套接字來啓動,但是我看到的每個教程都取決於最終用戶知道他們希望連接的計算機的IP地址。服務器的網絡發現
但是,在本地網絡LAN遊戲中,客戶端以某種方式自動檢測服務器。這是如何完成的?客戶端是否自動檢測每個可能的IP,是否有某種「GetDetectedIPs」API等?
我正在尋找可以在標準WIN32 API中以直C實現的答案。請勿使用MFC,.NET或C++。謝謝。
好的,所以我明白客戶端計算機和服務器計算機之間的通信可以通過在兩臺計算機之間創建套接字來啓動,但是我看到的每個教程都取決於最終用戶知道他們希望連接的計算機的IP地址。服務器的網絡發現
但是,在本地網絡LAN遊戲中,客戶端以某種方式自動檢測服務器。這是如何完成的?客戶端是否自動檢測每個可能的IP,是否有某種「GetDetectedIPs」API等?
我正在尋找可以在標準WIN32 API中以直C實現的答案。請勿使用MFC,.NET或C++。謝謝。
您可以讓客戶端發送一個UDP數據包給指定範圍內的每個IP,並讓服務器回答另一個UDP數據包。
這通常使用zero-conf來完成。它的微軟版本是Simple Service Discovery Protocol。
你需要的技術叫做廣播。例如,它用於BOOTP和DHCP協議。
發送一個包含廣播目標地址的數據包會導致它被LAN中的所有設備接收到。廣播地址是在其中主機標識字段填充有那些IP地址:
bcast_addr = ~netmask | my_addr;
發現過程通常喜歡如下:
也許客戶端可能會廣播UDP數據包?並且服務器以單播UDP數據包進行響應。 – SKi