游戏服务器:通过Internet广播UDP数据包?

时间:2010-07-18 23:39:30

标签: networking udp broadcast spoof

我的一个朋友做了一个小型的局域网可玩游戏,并要求我改变它,所以它可以通过互联网播放。我不想对客户端应用程序进行大的更改。

创建游戏时,服务器会不断发送UDP BROADCAST数据包,告诉大家游戏已创建。现在,我只需要更改此BROADCAST,以便将这些数据包发送到一组互联网IP地址。

你能否告诉我以下解决方案是否合适:我会创建一个房间服务器,我们称之为'room-broadcast-server',其中包含加入房间的每个人的IP地址。然后,客户端不会发送该BROADCAST数据包,而是将数据包发送到房间广播服务器,该服务器会将此数据包广播给所有加入房间的人。

问题是:客户端会从'room-broacast-server'接收这些数据包,他们会尝试与房间广播服务器通信,而不是与创建游戏的机器通信。我想欺骗客户端,以便他们认为数据包来自游戏服务器,而不是来自房间广播服务器。我该怎么做?

3 个答案:

答案 0 :(得分:1)

您是仅修改服务器,还是修改服务器客户端?我认为完全删除广播并让客户明确选择他们想要连接的服务器,而不是依赖服务器广播会更简单。

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

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

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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