我正在写一个简单的多人2d游戏,4个玩家Pong确切。
游戏开始时有一个开始菜单,您可以选择主持或加入游戏。 4名球员中的一名必须主持,其他3名球员将加入。我可以对着我的其他3个好友大喊大叫并告诉他们我的ip和端口号,但我想知道是否有办法搜索主机。对我来说听起来不可能,互联网上有数百万台电脑,我怎么能找到一台等待我电话的电脑。我知道星际争霸曾经在90年代中期做过。
我有一个关于如何实现这一目标的理论。那就是使用像sql这样的数据库来跟踪当前正在托管的人。这将是数据库的唯一用途,因为我没有保留用户统计信息或任何内容。
有更好的方法吗?
答案 0 :(得分:3)
假设您在局域网上,可以使用UDP来发现客户端。
如果客户端充当主机,它将侦听UDP数据报。如果它收到包含发现请求的请求,它将以其IP,端口和客户端所需的任何其他信息进行响应。 (您可以包括连接的玩家数量等)。
如果客户端充当客户端,它会在“加入游戏”屏幕时发送发现数据报。当主机响应时,它们将被添加到选择列表中。
当用户选择服务器时,使用您在发现响应中收到的IP和端口进行IP连接。
Lidgren network library提供了一些可能有用的很好的Discovery功能。
如果您不在局域网上,则需要某种可全局访问的中央目录 - 可能在网站上。当有人开始新游戏时,他们的客户将在目录中注册他们的IP等。然后,客户端将轮询该站点以获取服务器列表,然后将其用于填充“加入游戏”屏幕。
值得注意的是,服务器/目录方法在LAN环境中的工作方式与在Internet上的工作方式相同。 UDP更灵活,因为它不要求客户端对目录提供者有任何了解,因为它基本上会“为整个房间大喊”。
答案 1 :(得分:2)
您需要一个中央经纪人来识别正在托管的人和正在参与的人。
您也可能希望通过该同名主机传递游戏流量,因为在打开端口和在其他防火墙后面的远程计算机之间传递直接流量等方面存在很多问题。此外,如果您保持流量集中你可以对作弊进行一些检查和平衡。
答案 2 :(得分:1)
在互联网上使用某种可以写入文件的服务器(web / ftp)。当您托管游戏时,请在文件中写入IP和端口。当客户想要加入游戏时,函数可以检查文件并读取它。这是我想到的第一件事。
答案 3 :(得分:1)
如果这仅供局域网使用,则每个客户端都可以将UDP广播发送到网络子网的广播地址。
主机(或其他客户端)侦听同一UDP端口。