【问题标题】:Network Discovery of Servers服务器的网络发现
【发布时间】:2012-05-27 23:32:09
【问题描述】:

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

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

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

【问题讨论】:

    标签: c winapi sockets networking


    【解决方案1】:

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

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

    bcast_addr = ~netmask | my_addr;
    

    发现过程通常如下:

    1. 客户端在特定端口发送带有广播目标地址的 UDP 数据报。
    2. 服务器侦听此端口并接收数据报。其他计算机将其丢弃。
    3. 服务器通过一个普通的 UDP 数据报向客户端发送关于它自己的所有必要信息。

    【讨论】:

      【解决方案2】:

      这通常使用zero-conf 完成。它的微软版本是Simple Service Discovery Protocol

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • 也许客户端可以广播UDP数据包?服务器以单播 UDP 数据包响应。
        猜你喜欢
        • 2014-08-03
        • 1970-01-01
        • 1970-01-01
        • 2013-01-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-10
        • 1970-01-01
        相关资源
        最近更新 更多