2012-05-21 58 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数据报向客户端发送有关其自身的所有必要信息。