Networking 游戏服务器:通过互联网广播UDP数据包?

Networking 游戏服务器:通过互联网广播UDP数据包?,networking,udp,broadcast,spoof,Networking,Udp,Broadcast,Spoof,我的一个朋友制作了一个可在局域网上玩的小游戏,并要求我更改它,这样它就可以在互联网上玩了。我不想对客户端应用程序进行重大更改 创建游戏时,服务器会不断发送UDP广播数据包,告诉每个人游戏已经创建。现在,我只需要更改此广播,以便将这些数据包发送到一组internet IP地址 你能告诉我下面的解决方案是不是一个好的解决方案吗:我会创建一个房间服务器,让我们称之为“房间广播服务器”,它包含加入房间的每个人的IP地址。然后,客户端将不发送该广播数据包,而是将该数据包发送到房间广播服务器,该服务器将向加

我的一个朋友制作了一个可在局域网上玩的小游戏,并要求我更改它,这样它就可以在互联网上玩了。我不想对客户端应用程序进行重大更改

创建游戏时,服务器会不断发送UDP广播数据包,告诉每个人游戏已经创建。现在,我只需要更改此广播,以便将这些数据包发送到一组internet IP地址

你能告诉我下面的解决方案是不是一个好的解决方案吗:我会创建一个房间服务器,让我们称之为“房间广播服务器”,它包含加入房间的每个人的IP地址。然后,客户端将不发送该广播数据包,而是将该数据包发送到房间广播服务器,该服务器将向加入房间的每个人广播该数据包


问题是:客户端将从“room broacast服务器”接收这些数据包,并尝试与room broacast服务器通信,而不是与创建游戏的机器通信。我想愚弄客户,让他们认为数据包来自游戏服务器,而不是房间广播服务器。我该怎么做?

您是只修改服务器,还是同时修改服务器和客户端?我认为完全删除广播并让客户端显式地选择他们想要连接的服务器比依赖服务器广播更简单

作为版本1,您可以简单地要求玩家在客户端中键入服务器的IP地址/DNS名称,以便进行连接

对于版本2,您可以添加对“大厅”的支持,其中您有一个(已知的)中央大厅服务器,客户端和服务器都连接到该服务器以找到对方(因此服务器连接到大厅以宣布其存在,然后客户端连接到大厅以浏览其想要连接的服务器)


在我一直在编写的一个游戏中(但由于缺少空闲时间,目前暂时搁置:p),我将“lobble”服务器编写为一个简单的PHP+MySQL web应用程序,并让客户端和服务器使用HTTP请求轮询它以获取更新等。这样,我就可以在廉价的网络主机上托管中央大厅服务器,任何人都可以托管游戏(缺点是便宜的web主机不允许任意套接字连接,因此我无法在其上实现NAT穿孔,但如果/当游戏流行时,我的计划是将大厅服务器移动到更昂贵的主机上,该主机允许任意套接字连接…)

欺骗源地址不适合您的正常应用程序协议。它需要客户端计算机上的特殊权限,它会被一些网络过滤器删除,通常是粗俗和反社会的


由于您仍在修改客户端(将消息发送到游戏服务器而不是广播地址),您只需让游戏服务器附加“真实源”将数据包发送到它发送的每个数据包,并让客户端在从游戏服务器接收的数据包中期望并处理这些信息。

基本概念(一个中心大厅服务器+多个游戏服务器)Dean的第二个选项很好,甚至在零售在线游戏中也很常见。我不明白的一件事是,为什么要伪造IP地址。客户不应该关心服务器IP地址是什么,只要它从中获得有效的数据包。此外,在我看来,你不需要创建单独的房间(?)服务器,因为游戏服务器可以/应该管理客户端列表,因为客户端通过大厅服务器连接。

据我所知,很难“伪造”传入数据包的来源(即使来自房间广播服务器的数据看起来像来自游戏服务器)。您是否研究过使用UDP多播?然后每个客户端都应该在特定的端口/组上侦听。免责声明:由于TTL问题,我一直无法使其正常工作。是的,我担心欺骗源地址需要特殊权限,可能会被视为“恶意”。非常感谢!是的,我想我必须使用第二种选择。谢谢