代码之家  ›  专栏  ›  技术社区  ›  w2lame

服务器自动搜索的UDP广播

  •  2
  • w2lame  · 技术社区  · 14 年前

    我正在制作一个多人网络游戏。现在要连接到服务器,客户端需要服务器的ip地址。

    客户端在广播ip和端口a上广播其ip地址。

    服务器创建一个新的UDP连接,客户端在端口B上的行为就像客户端所说的那样。它发送游戏所需的所有重要信息,包括其IP。

    客户端是此连接的服务器,通过端口B从服务器接收数据。

    bind: Address already in use

    对此有什么合理的解决方案?

    1 回复  |  直到 14 年前
        1
  •  5
  •   Jerry Coffin    14 年前

    首先,让客户广播它的地址听起来很可怕,至少对我来说。广播意味着它只在服务器位于本地子网的情况下才工作,并且会用大量不必要的流量污染网络。

    我会让客户通过DNS服务发现服务器( DNS-SD ). 这是你可以利用的优势 multicast DNS

    其次,服务器应该 为每个客户端指定一个线程。而这个模型 可以 在某种程度上,它有相当多的开销和规模真的很差。

    最后,对(我认为是)您最初的问题:我将为所有客户机使用一个端口,而不是为每个客户机使用不同的端口。来自客户机的每个请求都将携带足够的信息,以便服务器执行它包含的任何请求。服务器只需监听其单个端口,并在每个请求到达时为其提供服务。您可能会为此指定多个线程,但它应该是一个通用的线程池——也就是说,所涉及的线程数只是一个配置问题,对总体设计没有逻辑意义(即,特定线程的标识没有意义——如果您移动到一个更大的服务器上,它是mancore的8倍,添加更多线程只是配置更多线程的简单问题,而不是更改总体设计)。