【发布时间】:2013-02-15 21:55:08
【问题描述】:
问题
我的一些朋友玩的游戏最多包含 4 名玩家。我正在尝试编写一个程序,它允许第五个人在不实际参与游戏的情况下监控游戏中发生的事情。
背景
游戏的多人部分功能如下:
一名玩家被指定为“主持人”。所有其他玩家通过输入主机的 IP 地址连接到主机。主机的机器负责控制游戏的AI。当游戏中发生事件时,游戏的主机副本将事件发送给其他玩家的每个游戏(客户端)。如果客户端玩家执行一个动作,他们的游戏会将动作发送给主机,主机又将它发送给其他玩家,这样任何玩家的动作对所有其他玩家都是可见的。主机和客户端都使用游戏配置文件中预定义的单个 TCP 端口(例如:端口 58282)。该游戏是一款即时战略游戏(非回合制)。
约束
1. 游戏机制不可更改。它是预编译的,无法更改多人游戏机制。
2.游戏使用TCP服务器与客户端通信
问题
有没有办法让一个单独的程序在主机或客户端计算机上运行以监听游戏的端口(在游戏进行时)?我知道 TCP 只允许每个 ip 地址的每个端口一个套接字,因此让游戏和单独的程序同时监听同一个端口是有问题的。假设我在游戏前启动外部应用程序并让应用程序监听游戏的端口,有没有办法让应用程序通过游戏端口听到主机,获取/复制该信息,然后将其转发到游戏? (有点像当地的中间人)
终极问题
考虑到限制,这可能吗?我会以最好的方式去做吗?
【问题讨论】:
-
你能改变游戏配置文件让它监听另一个端口吗?然后you 监听它的官方 端口(客户端连接的地方)并将所有内容转发到另一个端口(也就是说,您在每个连接的两个方向上转发所有数据)。
-
我相信更改客户端配置文件中的端口会导致客户端尝试使用同一端口与主机通信(主机也没有监听!)。例如,将客户端游戏更改为端口 3333 以便应用可以侦听 58282(并转发到 3333)会导致游戏尝试在端口 3333 上与主机通信,即使主机使用的是 58282。
标签: tcp port sharing multiplayer