服务器的网络发现

时间:2012-05-21 12:58:55

标签: c winapi sockets networking

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

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

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

3 个答案:

答案 0 :(得分:3)

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

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

bcast_addr = ~netmask | my_addr;

发现过程通常如下:

  1. 客户端在特定端口发送带有广播目标地址的UDP数据报。
  2. 服务器侦听此端口并接收数据报。其他电脑丢弃它。
  3. 服务器通过常用的UDP数据报向客户端发送有关其自身的所有必要信息。

答案 1 :(得分:1)

通常使用zero-conf来完成。它的Microsoft版本是Simple Service Discovery Protocol

答案 2 :(得分:0)

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