工程参考/服务端外网设置

来自天龙知识库
雪舞留言 | 贡献2026年9月9日 (三) 17:33的版本 (补充 Game.exe -fl 快捷方式启动,说明目标、起始位置及避免登录器覆盖手工区服列表的条件)
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳到导航跳到搜索

首页 · 服务端接口

这篇说明适合已经能在服务器本机正常玩游戏,现在想让同一路由器下的朋友,或互联网上的朋友连接进来的人。操作使用文本编辑器和系统网络设置,不需要安装环境管理工具。

本文以所有服务端程序和数据库都在同一台 Windows 电脑上为例,使用一个登录程序和一个游戏程序。先完成局域网设置,确认另一台电脑能玩,再做公网设置。配置格式不同、服务分散在多台电脑上的情况,见后面的进阶说明。

配置清单 · 局域网 · 公网 · 内外网同时访问 · 验证与排查

先看要改哪些配置

主要修改两份不同的文件。一份在服务器电脑上,另一份在每位玩家的游戏客户端里。

文件在哪里 这份文件负责什么
服务器电脑tlbb/Server/Config/ServerInfo.ini 告诉客户端应该连接哪些登录、游戏地址。IP0、IP(CNC)、IP(CTC)、IP(EDU) 及对应 Port 都在这份文件里修改。
玩家电脑Client/Patch/LoginServer.txt 客户端显示区服列表并发起登录时读取它。里面是一行一行的区服记录,填写“IP:登录端口”,没有 [Server0] 或 IP(CNC)= 这样的配置。

如果你在服务器电脑上也启动客户端测试,两个文件虽然在同一台电脑上,仍然需要分别修改。给朋友的客户端也要带上改好的 LoginServer.txt;只修改服务器电脑上自己的客户端,朋友那一份不会自动更新。

为什么要分别改两份文件

  1. 玩家选择区服,客户端从 LoginServer.txt 读取登录地址,例如 192.168.50.10:14400,连接登录程序 Login。
  2. 玩家选择角色,Login 根据 ServerInfo.ini 告诉客户端游戏地址,例如 192.168.50.10:14401
  3. 客户端再连接游戏程序 Server,进入场景。

所以“能登录账号”和“能进入游戏”是两次不同的连接。只改 LoginServer.txt,可能能看到角色,却在进入场景时连接失败。

这里的 IP 是要连接的电脑地址,端口 用来区分这台电脑上的不同服务。例如 192.168.50.10:14400 中,冒号前是 IP,冒号后是端口。本例 14400 用于登录,14401 用于游戏;客户端 LoginServer.txt 中的地址全部使用登录端口 14400。

修改前的准备

  1. 先确认在服务器本机能正常登录并进入场景。如果本机也不能玩,先处理原有启动或账号问题。
  2. 用平时的正常停服方式关闭服务端,等角色数据保存、ShareMemory 完成保存后再操作;同时关闭客户端。不要直接在任务管理器中强行结束保存程序。
  3. 各复制一份 ServerInfo.ini 和 LoginServer.txt 作为备份。编辑时保留原有文本编码;编辑器若显示 GBK 或 GB18030,保存时继续使用原编码。
  4. 找准实际运行的文件:服务端打开 Server.exe、Login.exe 所使用的 Config 文件夹;客户端打开你实际启动的那份游戏的 Patch 文件夹。不要只改源码目录 resources 里的样本文件。

下面的配置片段都用于修改原文件中的对应项目,不能拿它们覆盖整个文件。文件里的其他配置继续保留。

局域网设置

局域网例子:服务器和朋友的电脑接在同一个家庭路由器下。先在服务器电脑按 Win+R,输入 cmd 并回车,再输入:

ipconfig

找到当前联网的“以太网”或“无线局域网”适配器,记下它的 IPv4 地址。假设查到的是 192.168.50.10,下文就用这个地址演示;如果你查到 192.168.1.20,应把示例里的 192.168.50.10 全部换成 192.168.1.20。

不要抄“默认网关”,那通常是路由器的地址;也不要填朋友电脑的 IP。若服务端在虚拟机里,需在虚拟机里查询,并先看 虚拟机说明

第一步:在服务器电脑修改 ServerInfo.ini

打开 tlbb/Server/Config/ServerInfo.ini。用编辑器查找 [Server0][Server1]:这种用方括号括住的名称表示一组配置,也叫“节”。从这个名称往下,到下一个方括号名称之前,都属于这一组。

本例 [Server0] 中有 Type=0、ServerID=0,是游戏服务;[Server1] 中有 Type=1、ServerID=2,是登录服务。如果你的文件不是这种对应关系,先看 配置编号说明,不要按序号猜。已有的 Type、ServerID 等行都保留原值。

A. 同一个 ServerInfo.ini 文件里的 [Server0]:游戏地址

在原有 [Server0] 下面,把以下 IP 项改为服务器的局域网 IP;这里的四个端口都使用 游戏端口 14401

[Server0]
IP0=192.168.50.10
Port0=14401
IP(CNC)=192.168.50.10
Port(CNC)=14401
IP(CTC)=192.168.50.10
Port(CTC)=14401
IP(EDU)=192.168.50.10
Port(EDU)=14401

B. 仍在 ServerInfo.ini 文件里的 [Server1]:登录地址

继续找到原有 [Server1],把以下 IP 项改为同一个局域网 IP;这一组的四个端口都使用 登录端口 14400

[Server1]
IP0=192.168.50.10
Port0=14400
IP(CNC)=192.168.50.10
Port(CNC)=14400
IP(CTC)=192.168.50.10
Port(CTC)=14400
IP(EDU)=192.168.50.10
Port(EDU)=14400

两个片段之间原来还有其他配置,全部保留;不要重复添加 [Server0] 或 [Server1]。本文假设登录和游戏都在同一台电脑,并且没有另设代理服务器,所以两组 IP 相同,端口不同。

IP(CNC)、IP(CTC)、IP(EDU) 到底是什么

这些都是服务端 ServerInfo.ini 的项目,不写进客户端 LoginServer.txt。它们用于玩家选择不同运营商线路时返回相应地址,分别与 Port(CNC)、Port(CTC)、Port(EDU) 配对;IP0 与 Port0 则是默认地址和端口。

如果你的服务器只有一个可供朋友连接的地址,四个 IP 项都写这个地址即可。[Server0] 的四个 Port 项写 14401,[Server1] 的四个 Port 项写 14400。这样无论选择哪条线路,都能得到同一台服务器的正确端口。不要把 IP(CNC) 理解成公网 IP、IP(CTC) 理解成内网 IP。

这些线路项目若还留着旧 IP 或 0.0.0.0,可能在切换线路后连接失败;源码中 0.0.0.0 不代表关闭线路。原因放在后文的进阶说明中。

哪些 IP 这次先不改

所有服务端程序和数据库都在同一台电脑时,保留原有 IP1、Port1、[World]、[Billing] 和数据库 DBIP/DBPort。它们主要用于服务程序之间的通信。尤其不要使用“全部替换”,把文件中所有 127.0.0.1 都改掉。

改完后核对:游戏组是你的 IP 加 14401,登录组是你的 IP 加 14400;这一步只改了 ServerInfo.ini,还没有修改客户端。

第二步:在玩家电脑修改 LoginServer.txt

关闭游戏,用编辑器打开 Client/Patch/LoginServer.txt。这是另一份文件,里面按行列出区服名称和登录地址。

在 SERVER_BEGIN 与 SERVER_END 之间找到你要进入的区服,例如“天下第一”。保留这行前面的区组名、区服名、数字和提示文字,只改后面的地址。原来三个 127.0.0.1:14400,都改为 192.168.50.10:14400

以下是本例修改后的完整一行;如果你的前半行内容不同,保留你自己的前半行:

华东电信一区,天下第一,0,101,3,0,0,WELECOME TO TLBB,192.168.50.10:14400,192.168.50.10:14400,192.168.50.10:14400,

一条区服记录在文件中必须保持一行。网页显示时可能自动折行,保存时不要在中间按回车。使用英文半角逗号和冒号,地址两边不要加引号或空格。

“三个地址和空的第四地址”是什么意思

看这行末尾的地址部分:

192.168.50.10:14400,192.168.50.10:14400,192.168.50.10:14400,
  • 第一个地址:192.168.50.10:14400。
  • 第二个地址:192.168.50.10:14400。
  • 第三个地址:192.168.50.10:14400。
  • 第四个地址:本例没有填写,第三个地址后面的最后一个逗号要保留

这几个位置都是登录地址,供客户端选择线路时使用,不是分别填写“登录、游戏、公网、内网”。单个服务器地址的例子,三个位置都填一样即可;不要把其中一个改成游戏端口 14401。

逗号用于分隔项目。行尾逗号表示还有一个空项目,当前客户端依靠它读到足够的项目数量;删掉这个逗号,本例区服可能直接不显示。原文件若已经填了第四个地址,也将它改为有效的登录地址;原有额外数字或路由设置先保留,见 行格式说明

保存后把改好的文件放进每位玩家实际启动的那份客户端的 Patch 文件夹,再重新启动客户端。其他区服记录保持原样。

用快捷方式直接启动游戏,保留手工设置的 IP

如果你还没有把 Launch.ini 中的更新地址、区服列表地址配置成自己的,手工改好 LoginServer.txt 后,可以用 Game.exe -fl 的快捷方式直接启动游戏。这种启动方式不需要先配置 Launch.ini。

原因是:Launch.exe 是登录器和更新程序;Game.exe 才是游戏本体。Launch 的更新流程会根据 Launch.ini 的 [Launch] LoginServer 地址下载列表,写入 Client/Patch/loginserver.txt。在通常的 Windows 文件系统上,它与 LoginServer.txt 是同一份文件,手工填写的 IP 就可能被下载内容覆盖。

要避开的是 Launch 的更新流程。直接启动 Game.exe 不经过这段流程;-fl 是游戏识别“从登录器启动”的参数,Launch 自己启动游戏时也会带上它。它不是把 LoginServer.txt 设为只读的开关,再运行登录器或其他更新工具,文件仍可能被覆盖。

玩家电脑按下面操作:

  1. 关闭游戏和已经打开的 Launch 登录器,先备份并确认 Client/Patch/LoginServer.txt 中是自己设置的 IP。
  2. 找到实际使用的 Game.exe。常见 32 位程序位于 Client/Bin/Game.exe,64 位程序位于 Client/Bin64/Game.exe;选择已经能在这台电脑上正常运行的那一份,不需要同时建两个快捷方式。
  3. 右键 Game.exe,选择“发送到 → 桌面快捷方式”;Windows 11 可能需要先点“显示更多选项”。
  4. 右键桌面上的快捷方式,打开“属性”,切换到“快捷方式”选项卡。
  5. 在“目标”中保留 Game.exe 的完整路径,在路径结束的引号外面加一个空格,再加 -fl。使用英文半角连字符、小写 f 和小写字母 l,最后不是数字 1。
  6. 将“起始位置”设为这个 Game.exe 所在的文件夹,点击“应用”“确定”。以后用这个快捷方式启动游戏。

例如,你的客户端放在 D:\Games\TLBB\Client,使用 Bin 下的 Game.exe,快捷方式“目标”填写:

"D:\Games\TLBB\Client\Bin\Game.exe" -fl

同一个快捷方式的“起始位置”填写:

"D:\Games\TLBB\Client\Bin"

上面是快捷方式属性里的两个输入框,不是让你把两行都写到配置文件,也不是文件名。路径要换成自己电脑上的实际路径;不要把参数写成 "Game.exe -fl",不要把 Game.exe 重命名。

使用 Bin64 的 Game.exe 时,将“目标”改为对应的 Bin64/Game.exe,并将“起始位置”同步改为 Bin64 文件夹。程序依赖相对路径找资源,例如从 Bin 或 Bin64 读取上一级 Patch/LoginServer.txt,所以“起始位置”不能随意填桌面或 Client 根目录。

第一次用快捷方式启动后,核对区服列表和实际连接;退出游戏,再用编辑器查看同一份 LoginServer.txt,确认 IP 没有被覆盖。如果仍提示“请从 Launch.exe 运行游戏”,先核对参数是否在引号外、是否确为 -fl,以及快捷方式是否指向正确的 Game.exe。

直启会跳过本次登录器的更新、修复和客户端位数选择流程。前提是游戏资源及运行环境已齐全、客户端与服务端匹配;-fl 不能补齐缺少的文件,也不能修复网络不通。以后需要运行 Launch 更新时,先备份自己的列表并核对更新来源,更新后再检查 IP。不同来源或不同编译配置的 Game.exe 对参数检查可能不同,实际启动及文件保留效果需要实测

第三步:在服务器电脑允许两个端口通过防火墙

这一步让别的电脑能访问登录和游戏程序。在服务器电脑上按 Win+R,输入 wf.msc 并回车,打开“高级安全 Windows 防火墙”:

  1. 点击“入站规则”,再点“新建规则”。
  2. 规则类型选择“端口”。
  3. 选择“TCP”,在“特定本地端口”中填写 14400,14401
  4. 选择“允许连接”。
  5. 勾选服务器当前联网连接使用的配置文件。Windows 网络属性显示“专用”就需勾选“专用”,显示“公用”就需勾选“公用”;不确定时先在系统网络设置中确认。
  6. 给规则起名,例如“TLBB 登录与游戏”,保存规则。

纯局域网使用时,可在规则属性的“作用域”中将远程 IP 限制为实际玩家地址或网段。后来开放公网时,也要重新确认这个范围允许外网玩家;云服务器还要设置后文的云安全组。不要为了测试而关闭整个防火墙。

如果仍然不通,检查玩家是否连到访客 Wi-Fi,路由器是否启用了“客户端隔离”;这些功能可能不允许两台电脑互相连接。

第四步:启动服务,用另一台电脑进游戏

按平时手工开服的流程启动。依赖顺序为:数据库就绪,再依次启动 ShareMemory、Billing、World、Login、Server;每一步确认正常后再继续。这次只改网络地址,原有启动参数保持不变。

从同一路由器下的另一台玩家电脑打开改好的客户端,选择目标区服,登录账号、选择角色并进入场景。能进入并正常移动,才算完成局域网这一步;只在服务器本机测试不足以证明朋友也能连。失败时按 验证与排查 检查,不要急着继续改公网。

公网设置

公网就是让不在你家局域网里的朋友,通过互联网连接进来。家用路由器部署通常需要两个地址:服务器的内网 IP宽带的公网 IP

本例地址 填在什么地方
192.168.50.10:服务器内网 IP 服务器网卡继续使用它;路由器把收到的连接转发到这个地址。
203.0.113.10:假设的公网 IP 服务端向玩家提供的地址、玩家客户端的登录地址改为它。此地址仅供文档举例,必须换成自己的真实公网 IP。

第一步:确认你有能接收连接的公网 IP

家用路由器:进入路由器管理页面,查看“上网设置”或“WAN 状态”的 IPv4 地址。WAN 指路由器连接宽带的那一侧。向运营商确认这条宽带是否分配了可接收入站连接的公网 IPv4;网页上查到一个出口 IP,不能证明你能在这个 IP 上开放游戏端口。

如果 WAN 地址落在以下范围,它仍是内部地址,不能直接填给外网朋友使用:

  • 10.0.0.0 到 10.255.255.255。
  • 172.16.0.0 到 172.31.255.255。
  • 192.168.0.0 到 192.168.255.255。
  • 100.64.0.0 到 100.127.255.255。

这可能是光猫还在做一层转发,也可能是运营商没有给你独立公网地址。没有可控制的公网入口时,单改游戏配置无法解决,需要先处理宽带地址,或另行配置公网转发/VPN;具体网络效果需要实测。

云服务器:在云控制台找到这台实例的“公网 IP”或“弹性公网 IP(EIP)”,使用它作为玩家连接地址。后面的路由器操作改为云控制台的“安全组”设置。

第二步:在服务器电脑把 ServerInfo.ini 改为公网地址

先正常停服。仍然打开 tlbb/Server/Config/ServerInfo.ini,这次把之前写的局域网 IP 改成真实公网 IP。下面依旧使用 203.0.113.10 作示例,端口保持 14400/14401。

A. ServerInfo.ini 的 [Server0]:公网游戏地址

[Server0]
IP0=203.0.113.10
Port0=14401
IP(CNC)=203.0.113.10
Port(CNC)=14401
IP(CTC)=203.0.113.10
Port(CTC)=14401
IP(EDU)=203.0.113.10
Port(EDU)=14401

B. ServerInfo.ini 的 [Server1]:公网登录地址

[Server1]
IP0=203.0.113.10
Port0=14400
IP(CNC)=203.0.113.10
Port(CNC)=14400
IP(CTC)=203.0.113.10
Port(CTC)=14400
IP(EDU)=203.0.113.10
Port(EDU)=14400

只替换原有组里的这些项目,保留其他行。服务器网卡仍使用原来的内网 IP;同机内部的 IP1、World、Billing、数据库地址也保持原配置。不要把路由器的公网 IP 填到服务器的网卡设置里。

第三步:把玩家的 LoginServer.txt 改为公网登录地址

关闭客户端,打开 Client/Patch/LoginServer.txt,找到同一个目标区服,把已填写的登录地址改成 真实公网 IP:14400。本例修改后的完整一行是:

华东电信一区,天下第一,0,101,3,0,0,WELECOME TO TLBB,203.0.113.10:14400,203.0.113.10:14400,203.0.113.10:14400,

同样保留最后的逗号,所有已填地址都用登录端口 14400,并把文件同步给朋友。没有配置自己的 Launch 更新来源时,按 Game.exe -fl 快捷方式说明 启动,避免列表又被下载覆盖。到这一步,两份文件里的玩家连接地址已经改为公网,下面还要让路由器把连接送到服务器。

第四步:在路由器添加两条端口转发

路由器管理页面找到“端口转发”,也可能叫“虚拟服务器”或“NAT 转发”。它的作用是:朋友访问你的公网 IP 时,路由器知道应转交给内网的哪台电脑。

新建登录游戏两条规则,按下面填写。目标 IP 使用服务器的内网 IP,不是公网 IP,也不是路由器自己的地址。

路由器界面中的项目 应该填写什么
规则名称 第一条叫“TLBB 登录”;第二条叫“TLBB 游戏”,名称便于自己识别。
协议 两条均选择 TCP。
内部 IP / 目标 IP / 服务器 IP 两条均填服务器内网 IP,本例 192.168.50.10。
外部端口 / 公共端口 登录规则填 14400,游戏规则填 14401。
内部端口 / 本地端口 登录规则同样填 14400,游戏规则同样填 14401。
启用状态 两条都启用并保存。

如果界面要求填写“起始端口”和“结束端口”,一条规则的起止端口填同一个数。例如登录规则两格都填 14400。完成后的连接关系应当是:

  • 朋友访问 公网 IP:14400,转到 192.168.50.10:14400
  • 朋友访问 公网 IP:14401,转到 192.168.50.10:14401

在路由器的地址分配设置中,为服务器保留固定内网 IP,避免重启后地址变化、规则却还指向旧电脑。这通常叫“DHCP 地址保留”或“静态地址分配”。不要为同一个服务器 IP 随意占用其他设备已使用的地址。

两条规则的外部和内部端口先保持相同。不要只把外部游戏端口改为 24401、内部仍用 14401;服务端如果还告诉客户端去连接 14401,客户端就找不到你设置的外部入口。确实需要换端口时,见 改端口说明

光猫和路由器都在做地址转发时,光猫还要把这两个端口转给路由器,路由器再转给服务器;只配置其中一层可能不通。不同设备的管理页面不同,要按真实网络连接核对。

云服务器的对应操作

在云控制台找到绑定到这台服务器的安全组,也就是云平台提供的一层网络防火墙,添加允许入站 TCP 14400 和 TCP 14401 的规则;来源范围应包含预期玩家的公网地址。服务器 Windows 防火墙也要允许这两个端口。若局域网步骤中限制了来源为内网地址,公网使用时需调整。

云平台已经把公网 IP 绑定到实例时,按该平台要求检查公网绑定或转发,无需套用家用路由器界面。公网 IP 直接配在服务器网卡、没有路由器转发的部署,也只需检查实际路径上的防火墙等规则。

本篇游戏连接使用 TCP。World、Billing、数据库和远程管理端口不属于玩家所需的这两个端口,不随这次操作一起开放。

第五步:从真正的外网测试

重新启动服务端,让一位不在你家 Wi-Fi 下的朋友测试,或用连接手机热点的电脑测试:选择区服、登录、选角、进入场景并移动。两台电脑仍在同一路由器下时,不能用这个结果证明真正外网可用。

外网不能进时,按 验证与排查 分别测试 14400 与 14401。如果朋友在外面能玩、你自己在家反而进不去,继续看下一节。

公网和局域网同时访问

假设外面的朋友已经能用公网 IP 玩游戏,你自己在家也使用这份客户端。此时你的电脑是从局域网访问自家的公网 IP,再回到局域网服务器。路由器需要支持这种“出去再转回来”的连接,通常叫 NAT 回环,英文名称为 NAT loopback 或 hairpin NAT。

如果路由器支持并启用它,服务端和所有客户端可以统一使用公网地址,再从家里的玩家电脑完成一次登录、进场景测试。如果不支持,可能出现“朋友能玩,我自己进不去”;这不一定是服务器配置错了。

只给自己把 LoginServer.txt 改回内网 IP,不保证能解决。这只改变最初的登录地址,选择角色后服务器仍会告诉客户端连接公网游戏地址。ServerInfo.ini 的 IP1 也不会自动成为给内网玩家返回的地址。

方案 设置与前提
同一个公网入口,路由器支持 NAT 回环 服务端和客户端统一使用公网示例。路由器必须支持并启用 NAT loopback / hairpin NAT,让局域网玩家访问公网登录、游戏端口时正确转回内网。必须用一台局域网客户端实测两个端口及完整进游戏。
所有玩家通过 VPN 组网 VPN 可让不同地点的电脑加入一个虚拟内部网络。所有玩家和服务器都加入并能互相连接后,可按局域网步骤使用服务器的 VPN IPv4。没有加入的普通公网玩家不能直接使用这个地址,实际组网效果需要实测。
路由器不支持回环,且希望维持普通公网入口 需要调整路由/更换支持回环的设备,或专门设计能正确返回内外地址的代理方案。不能承诺只修改本文几个 IP 就同时连通。

在服务器本机测试公网 IP 也可能遇到 NAT 回环限制。先分别用局域网另一台电脑与真正的外网电脑测试,避免把“内网访问自己的公网地址失败”误判为公网服务不可达。

只修改 hosts、做域名内外分流,不能修正本文服务端直接下发的数字 IP;不同来源返回不同地址的代理方案需要同时核对登录、进入场景以及后续换服连接,需要实测。

验证与排查

1. 服务器上检查监听

“监听”表示程序已经启动,并在等待其他电脑连接。在服务器电脑上从开始菜单搜索并打开 PowerShell,输入以下命令;命令中的 14400、14401 要与实际设置一致:

Get-NetTCPConnection -State Listen -LocalPort 14400,14401 |
    Select-Object LocalAddress,LocalPort,OwningProcess

结果应有 14400 和 14401 两个端口。LocalPort 是本地端口,OwningProcess 是占用它的程序编号(PID);LocalAddress 显示 0.0.0.0 通常表示正在本机所有 IPv4 网络接口上等待连接,属于正常情况。

要确认是否由正确程序占用,将下一条命令中的 1234 换成对应行的 OwningProcess 数字,再执行:

Get-Process -Id 1234 | Select-Object Id,ProcessName,Path

登录端口对应 Login,游戏端口对应 Server;有些部署的程序名使用 LoginServer、GameServer。查询无记录、报未找到对象或只有一个端口时,先查该服务是否启动成功、实际读取哪个 Config 文件夹,以及是否被别的程序占用了端口。

2. 从局域网玩家电脑测试

这次到另一台玩家电脑打开 PowerShell,输入以下两条命令。将 192.168.50.10 换成服务器的实际内网 IP:

Test-NetConnection -ComputerName 192.168.50.10 -Port 14400
Test-NetConnection -ComputerName 192.168.50.10 -Port 14401

分别查看结果中的 TcpTestSucceeded:True 表示这个端口可以连接,False 表示连接没有成功。14400 为 True、14401 为 False 时,应先处理游戏端口,而不是继续改客户端的登录端口。

两个 True 只证明网络端口能连接,还要实际登录、选角、进入场景;不能据此断定账号或数据库都正常。旧系统没有这些 PowerShell 命令时,可用 netstat -ano 检查服务器监听,并用其他 TCP 连通性工具从玩家电脑测端口。

3. 从真正的外网测试

使用未连接服务器局域网的另一台电脑,例如手机热点下的电脑;将下列文档 IP 换成实际公网 IP:

Test-NetConnection -ComputerName 203.0.113.10 -Port 14400
Test-NetConnection -ComputerName 203.0.113.10 -Port 14401

两项都成功后,再用对应客户端实际选择区服、登录账号、选择角色并进入场景,确认能够移动;有多游戏进程时还要测试相应换场景连接。需要内外网同时使用时,在局域网客户端重复完整流程。能 ping 通不代表 TCP 端口开放,ping 不通也不代表 TCP 一定不通。

按失败阶段定位

现象 优先核对
目标区服不显示或显示异常 实际读取的 LoginServer.txt、文件编码、SERVER_BEGIN/END、目标记录是否同一行、字段数量和行尾逗号;本机改的文件是否同步给玩家。
14400/14401 在服务器上没有监听 Login/Server 是否正常启动;是否改了资源副本而非部署文件;端口冲突、World/数据库等依赖错误。
本机可测通,局域网电脑测不通 服务器实际内网 IP、主机防火墙配置文件与来源范围、访客 Wi-Fi 隔离、虚拟机网络模式和路由。
局域网通,真正外网两个端口不通 公网入口是否可控、双重 NAT/运营商 NAT、两个 TCP 转发、映射内网 IP、云安全组及上游入站限制。
能登录或看到角色,进入游戏失败 GameServer 返回的 IP/端口、14401 映射与监听;所有被选中的 IP(CNC/CTC/EDU) 是否还指向旧地址;Login 与游戏配置是否同步。
只在切换线路后失败 客户端备用登录地址及第四地址、服务器对应线路的 IP/Port、ProxyConnect 与代理来源识别配置。
外网可玩,内网使用公网入口失败 路由器 NAT 回环,以及登录成功后返回的游戏地址。
端口都通但认证或进场景仍失败 账号、Billing/数据库、World 与游戏进程就绪情况、客户端和服务端资源是否匹配;结合日志定位,不能仅凭 TCP 成功排除业务故障。
修改后仍连接旧地址 是否启动了另一份客户端/服务端、进程是否重启、更新器是否覆盖了 LoginServer.txt、线路地址是否漏改。手工列表可按 Game.exe -fl 快捷方式说明 启动并核对。

Login 日志中的 WLRetCharLoginHandler::Execute() 成功记录包含下发的 IP、Port、SID,可用于核对进入游戏时真正使用的地址。若它下发的地址本身不可达,继续修改客户端初始登录地址不会修复这一段。

验收与恢复

  • 监听进程正确;局域网或公网目标玩家能访问两个实际 TCP 端口。
  • 同一份已更新客户端能够登录、选角、进场景;需要同时支持的网络和线路分别完成实测。
  • World、Billing、数据库和管理入口未因这次配置被一并暴露给玩家。
  • 如修改后异常,正常停服,恢复备份的服务端配置和各份客户端列表,恢复本次改动的映射/防火墙规则,再按原流程启动。不要回滚未参与本次修改的其他设置。

进阶说明

以下内容用于配置与示例不同,或需要进一步定位问题时查阅。

地址与端口的区别

地址或配置项 含义
127.0.0.1 代表发起连接的电脑自己。同机服务之间可以用;如果写进朋友的客户端登录地址,指向的会是朋友自己的电脑。
0.0.0.0 在系统监听结果中通常表示本机所有 IPv4 接口;不能作为发给玩家的连接地址。它写在线路配置中,也不表示禁用线路。
IP0 / Port0 ServerInfo.ini 登录/游戏组中的默认玩家地址和端口。当前程序用 Port0 开始监听连接,默认也把这个端口告诉客户端。
IP1 / Port1 ServerInfo.ini 中用于服务端内部配置;不是让内网玩家连接的第二组登录/游戏地址。

当前程序用 IPv4 TCP,在本机所有 IPv4 接口上监听指定端口,源码名称为 INADDR_ANY。因此路由器转发的部署中,IP0 可以是路由器公网 IP,而服务器网卡继续使用内网 IP。本文使用数字 IPv4;域名、IPv6 和不同客户端的处理方式需要另行核对。

同机部署通常保留的内部配置

文件内的位置 资源文件的示例值
ServerInfo.ini [World] IP / Port 127.0.0.1 / 777,连接 World 服务。
ServerInfo.ini [Billing] IP0 / Port0 127.0.0.1 / 10101,连接 Billing 服务;此处 IP0 不是玩家游戏地址。
ServerInfo.ini [Server0] IP1 / Port1 127.0.0.1 / 8880,保留内部配置。
ServerInfo.ini [Server1] IP1 / Port1 127.0.0.1 / 8882,保留内部配置。
LoginInfo.ini、ShareMemInfo.ini、BillingInfo.ini[System] DBIP / DBPort 127.0.0.1 / 3306,连接数据库;实际已使用其他数据库端口时保留原值。

这些是资源文件的示例,不是让你开放的端口清单。服务配置里“连接到 127.0.0.1”,也不能证明另一个服务只接收本机连接;要看其实际监听与防火墙。World、Billing、数据库和管理端口应限制为需要它们的服务电脑才能访问。

配置编号不同怎么办

本例配置 如何识别
ServerInfo.ini [Server0] 下的 ServerID=0、Type=0 Type=0 表示游戏服务。本例 CurrentServerID=0 对应这个服务。
ServerInfo.ini [Server1] 下的 ServerID=2、Type=1 Type=1 表示登录服务。LoginInfo.ini 的 [System] LoginID=2 对应 ServerID=2。
[Server1]ServerID=2 前者是配置组名称,后者是服务编号;数字不要求相同。不要为了改地址而重编号。

布局与示例不同时,按 Type、ServerID、LoginID 和实际启动配置定位对应服务,再改那一组地址。保留 ServerNumber、MachineID、共享内存键等原值;这些项目不是公网开关。

客户端行格式的补充

LoginServer.txt 用逗号分隔项目。完整区服行的第 1 至 8 项是区组名、区服名、原有属性及提示文字;第 9 至 12 项才是四个登录地址。本文保留前八项,修改已经填写的登录地址。地址为空时,也要保留用于分隔它的逗号。

当前客户端要求至少 12 项;本例第三个地址后的行尾逗号保留第 12 项。若第四个地址已填写,应核对它也能连接 Login;如果还存在第 13 项,它是另一个路由设置,不要把它当 IP 改掉。不要凭“都是数字”就修改区服前半行,也不要把服务端的 ServerID 写进去。

想改用其他端口

端口是 1 至 65535 的整数。同台电脑上的登录、游戏程序应使用不同端口,并避开 World、Billing、数据库和其他程序占用的端口。

例如想把游戏端口从 14401 改成 24401,需要一起修改 ServerInfo.ini 游戏组的 Port0、Port(CNC)、Port(CTC)、Port(EDU),防火墙放行的游戏端口,以及路由器游戏规则的外部和内部端口。重启后检查新端口是否监听。游戏端口改变不会把客户端 LoginServer.txt 的登录端口变成 24401。

如果改的是登录端口,则修改 ServerInfo.ini 登录组的四个端口、客户端 LoginServer.txt 中所有已填登录地址的端口,以及相应防火墙和转发规则。公网端口与内网端口不同的代理方案需要单独核对,不能直接套用本文同端口的例子。

为什么需要核对运营商地址

资源配置中 LoginInfo.ini 的 [System] ProxyConnect=1。当前实现会根据客户端选择的线路,返回 ServerInfo.ini 中游戏组的 IP(CNC)、IP(CTC)、IP(EDU) 及对应端口;默认分支才使用 IP0/Port0。源码只要成功读取到一对线路 IP/Port 就认为它已启用,即使 IP 填的是 0.0.0.0。

这就是主步骤同时填写四组地址的原因。保留当前可用的 ProxyConnect;它控制代理业务,不是“是否开启公网”的开关。已有专门的代理服务器或多运营商入口时,各组应填写各自真实地址,不能用本文单地址例子覆盖原有部署。

ServerInfo.ini 的 [Proxy] 中 Proxy0ForCncUser、Proxy0ForCtcUser、Proxy0ForEduUser 等,用于识别连接来自哪个代理服务器。它与 [Server0]/[Server1] 下的线路地址用途不同;不要把路由器网关或普通玩家内网 IP 填进去尝试自动区分内外网,当前实现按具体来源 IP 匹配,还会影响代理准入判断。

虚拟机或多台服务器

  • 虚拟机桥接:通常让虚拟机成为局域网里的另一台电脑,应在虚拟机中查它自己的 IPv4,并使用那个地址;仍需确认玩家能访问它。
  • 虚拟机 NAT:虚拟机通过宿主机转发网络,还需把宿主机收到的登录、游戏端口转给虚拟机。公网再经过家用路由器时,两层转发都要配通,不能只改虚拟机里的游戏配置。
  • World、Billing、数据库分散在不同电脑时,相互连接要使用真实可达的内部地址,不能都填代表自己的 127.0.0.1。ShareMemory 等还有同机依赖,拆分到多台电脑不是只改 IP 就能完成。
  • 登录与游戏使用不同的公网 IP 时,客户端列表和登录组填登录服务器 IP,游戏组填游戏服务器 IP。
  • 同时运行多个游戏程序时,每个承载玩家的程序都要有可达的地址、端口和转发;同机端口不能冲突。还要测试玩家切换到其他游戏服务器上的场景,不能只验证刚进入游戏的位置。

账号注册网站、更新器、管理后台有独立端口需求时,按对应服务另行配置。公网中继、VPN、独立代理及跨服连接的具体效果需要实测。

核对依据与适用范围

字段及调用路径已对照当前源码和资源配置核对;本文示例没有在真实公网、路由器或游戏进程中执行,完整连接效果需要实测。同名配置在其他实现中可能有不同含义,应先确认实际运行程序与配置布局一致。

源码或资源位置(相对项目目录) 用于核对
resources/Server/Config/ServerInfo.iniLoginInfo.ini 示例节名、ServerID、LoginID、端口及 ProxyConnect。
resources/Client/Patch/LoginServer.txt 目标区服记录与行尾空地址字段。
Prj/GameCode/Server/Tools/TlbbEnvironmentManager/TlbbEnvironmentManager.Core/PathsAndConfig.cs 外网设置修改的服务端键与客户端三个已填地址;仅作为参考来源,文章操作不依赖此工具。
Prj/GameCode/Common/ServerBase/Config.cppConfig.h 线路字段启用条件、服务 ID 映射与代理来源识别。
Prj/GameCode/Common/Net/Socket.cppServerSocket.cpp IPv4 TCP、INADDR_ANY 监听。
Prj/GameCode/Server/Server/LoginServer/Login/Player/LoginPlayerManager.cppGameServer/Server/Player/IncomingPlayerManager.cpp Login 与 GameServer 从 Port0 建立玩家端监听。后一个路径相对同级 Server/Server。
Prj/GameCode/Server/Server/LoginServer/Login/Packets/WLRetCharLoginHandler.cpp;同一 Login 目录的 Player/LoginPlayer.cpp 进入游戏时下发游戏地址、线路选择及默认回退。
Prj/GameCode/Client/Client/Game/Procedure/GamePro_Login.cppLoginDataStructDef.h 区服行解析、四个登录地址与线路选择。
Prj/GameCode/Client/Client/Game/Network/PacketHandler/LCRetCharLoginHandler.cpp 客户端使用服务器下发的 GameServer 地址和端口。
Prj/GameCode/Client/Client/Game/Game.cppPrj/GameCode/Client/Client/Game/Procedure/GamePro_Login.h Game.exe 的 -fl 启动参数检查,以及相对于运行目录读取 Patch/LoginServer.txt 的路径。
Prj/GameCode/Client/Client/Launch/PatchSystem.cppDownloader.cppLaunchDialog.cpp 登录器下载并重写区服列表的条件,以及启动 Game.exe 时传入 -fl 并设置其所在目录为工作目录。