为游戏目的构建 LAN 模拟器

为游戏目的构建 LAN 模拟器

我为《魔兽争霸 III》构建了一个简单的实用程序,它允许用户加入远程托管的游戏,就像在局域网中访问一样。它的理念非常简单:

  1. 玩家 A 和 B 想要玩游戏。他们在路由器上设置端口转发,启动我的实用程序并交换他们的外部 IP 地址。
  2. 然后,玩家在我的实用程序中输入彼此的 IP 地址,其中一个玩家创建一个魔兽争霸 III 游戏。
  3. 我的实用程序使用魔兽争霸 III 数据包格式查询本地机器上是否有任何托管的魔兽争霸 III 游戏。如果收到响应(包含游戏信息),它会直接将其转发到列表上的每个 IP。
  4. 由于端口转发,数据包(更具体地说,数据报)到达另一个魔兽争霸 III 实例,因此另一个用户现在可以看到他朋友的游戏,也可以加入其中。

它运行得很好。但是,它仍然需要用户设置端口转发,而我的问题在于 - 避免这种情况的最佳方法是什么?

我一直在考虑 UPnP / NAT-PMP,但这在我的应用程序监听时最有用。在这种情况下,我只会通知另一端的魔兽争霸 III 我的机器上有游戏。但我可以为另一个应用程序创建端口映射吗?

我肯定遗漏了一些东西,所以如果有人能给我指明正确的方向我会很高兴。

答案1

没有可靠的标准方法来告诉不同 NATted 网络上的远程系统为本地系统上的应用程序打开端口。

有三种基本方法可以避免用户在大多数应用程序中设置端口转发:

A. 告诉用户,除非他们直接将计算机或设备连接到 ISP 不阻止传入流量的互联网,否则他们将被 SOL。这是一个坏主意。

B. 使用 uPNP 之类的东西以编程方式告诉路由器打开端口。这假设他们的路由器支持它。

C. 在任何 NATted 网络之外拥有一个知名系统,客户端可以向其进行传出连接。此系统可能还需要代表客户端转发流量。

“LAN 模拟器”的正确术语是虚拟专用网络。 Hamachi 和 OpenVPN 是两个可以设置 VPN 的软件套件。我相信 @gronostaj 提到的 Garena 的操作方式类似,并且具有游戏玩家友好的界面。

VPN 属于 C 类 - 您需要一个可以在任何人的 NAT 之外访问的 VPN 服务器才能正常工作。VPN 可以很好地工作 - 虚拟网络将像 LAN 一样运行,并且 VPN 上的系统可以接收来自 VPN 上任何其他系统的传入连接。

我很确定您不想承担运营一个可集中访问的 VPN 的费用和责任 - 更不用说将其限制为仅限魔兽世界的使用会很困难,而且责任也更大。

我很少使用 Hamachi,所以我不确定你是否可以利用它来实现你的目标。

您能做的最好的事情可能是支持 uPnP 并在您的软件中包含常见路由器的端口转发说明。

相关内容