3

好的,所以我知道客户端计算机和服务器计算机之间的通信可以在 Windows 中通过在两台计算机之间创建套接字来启动,但是我看到的每个教程都取决于最终用户知道计算机的 IP 地址他们希望连接的。

然而,在本地网络 LAN 游戏中,客户端会以某种方式自动检测服务器。这是怎么做到的?客户端是否自动检查每个可能的 IP,是否有某种“GetDetectedIPs”api 等?

我正在寻找可以在标准 WIN32 API 中直接用 C 实现的答案。请不要使用 MFC、.NET 或 C++。谢谢你。

4

3 回答 3

3

您需要的技术称为广播。例如,它用于 BOOTP 和 DHCP 协议中。

发送带有广播目标地址的数据包会导致 LAN 中的所有设备都接收到该数据包。广播地址是一个 IP 地址,其中主机标识字段用 1 填充:

bcast_addr = ~netmask | my_addr;

发现过程通常如下:

  1. 客户端在特定端口发送带有广播目标地址的 UDP 数据报。
  2. 服务器侦听此端口并接收数据报。其他计算机丢弃它。
  3. 服务器通过普通的 UDP 数据报向客户端发送所有关于自身的必要信息。
于 2012-05-21T13:15:42.963 回答
1

这通常使用zero-conf完成。它的 Microsoft 版本是简单服务发现协议

于 2012-05-21T13:09:37.177 回答
0

您可以让客户端向指定范围内的每个 IP 发送一个 UDP 数据包,并让服务器用另一个 UDP 数据包应答。

于 2012-05-21T13:05:57.250 回答