工程参考/服务端外网设置:修订间差异
优化外网设置说明:区分服务端与客户端文件,分步解释地址、端口、行尾逗号及手工操作 |
补充 Game.exe -fl 快捷方式启动,说明目标、起始位置及避免登录器覆盖手工区服列表的条件 |
||
| 第122行: | 第122行: | ||
保存后把改好的文件放进'''每位玩家实际启动的那份客户端的 Patch 文件夹''',再重新启动客户端。其他区服记录保持原样。 | 保存后把改好的文件放进'''每位玩家实际启动的那份客户端的 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 设为只读的开关,再运行登录器或其他更新工具,文件仍可能被覆盖。 | |||
在'''玩家电脑'''按下面操作: | |||
# 关闭游戏和已经打开的 Launch 登录器,先备份并确认 Client/Patch/LoginServer.txt 中是自己设置的 IP。 | |||
# 找到实际使用的 Game.exe。常见 32 位程序位于 '''Client/Bin/Game.exe''',64 位程序位于 '''Client/Bin64/Game.exe''';选择已经能在这台电脑上正常运行的那一份,不需要同时建两个快捷方式。 | |||
# 右键 Game.exe,选择“发送到 → 桌面快捷方式”;Windows 11 可能需要先点“显示更多选项”。 | |||
# 右键桌面上的快捷方式,打开“属性”,切换到“快捷方式”选项卡。 | |||
# 在“目标”中保留 Game.exe 的完整路径,在路径结束的引号'''外面加一个空格,再加 -fl'''。使用英文半角连字符、小写 f 和小写字母 l,最后不是数字 1。 | |||
# 将“起始位置”设为这个 Game.exe 所在的文件夹,点击“应用”“确定”。以后用这个快捷方式启动游戏。 | |||
例如,你的客户端放在 '''D:\Games\TLBB\Client''',使用 Bin 下的 Game.exe,快捷方式“目标”填写: | |||
<pre style="white-space:pre-wrap;overflow-wrap:anywhere;font-size:13px;line-height:1.7;padding:12px;background:#f5f7f8;border:1px solid #dbe3e6;">"D:\Games\TLBB\Client\Bin\Game.exe" -fl</pre> | |||
同一个快捷方式的“起始位置”填写: | |||
<pre style="white-space:pre-wrap;overflow-wrap:anywhere;font-size:13px;line-height:1.7;padding:12px;background:#f5f7f8;border:1px solid #dbe3e6;">"D:\Games\TLBB\Client\Bin"</pre> | |||
上面是'''快捷方式属性里的两个输入框''',不是让你把两行都写到配置文件,也不是文件名。路径要换成自己电脑上的实际路径;不要把参数写成 <code style="white-space:normal;overflow-wrap:anywhere;">"Game.exe -fl"</code>,不要把 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 对参数检查可能不同,实际启动及文件保留效果'''需要实测'''。 | |||
=== 第三步:在服务器电脑允许两个端口通过防火墙 === | === 第三步:在服务器电脑允许两个端口通过防火墙 === | ||
| 第202行: | 第234行: | ||
<pre style="white-space:pre-wrap;overflow-wrap:anywhere;font-size:13px;line-height:1.7;padding:12px;background:#f5f7f8;border:1px solid #dbe3e6;">华东电信一区,天下第一,0,101,3,0,0,WELECOME TO TLBB,203.0.113.10:14400,203.0.113.10:14400,203.0.113.10:14400,</pre> | <pre style="white-space:pre-wrap;overflow-wrap:anywhere;font-size:13px;line-height:1.7;padding:12px;background:#f5f7f8;border:1px solid #dbe3e6;">华东电信一区,天下第一,0,101,3,0,0,WELECOME TO TLBB,203.0.113.10:14400,203.0.113.10:14400,203.0.113.10:14400,</pre> | ||
同样保留最后的逗号,所有已填地址都用登录端口 | 同样保留最后的逗号,所有已填地址都用登录端口 14400,并把文件同步给朋友。没有配置自己的 Launch 更新来源时,按 [[#用快捷方式直接启动游戏,保留手工设置的 IP|Game.exe -fl 快捷方式说明]] 启动,避免列表又被下载覆盖。到这一步,两份文件里的玩家连接地址已经改为公网,下面还要让路由器把连接送到服务器。 | ||
=== 第四步:在路由器添加两条端口转发 === | === 第四步:在路由器添加两条端口转发 === | ||
| 第341行: | 第373行: | ||
|- | |- | ||
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 修改后仍连接旧地址 | | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 修改后仍连接旧地址 | ||
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 是否启动了另一份客户端/服务端、进程是否重启、更新器是否覆盖了 LoginServer. | | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 是否启动了另一份客户端/服务端、进程是否重启、更新器是否覆盖了 LoginServer.txt、线路地址是否漏改。手工列表可按 [[#用快捷方式直接启动游戏,保留手工设置的 IP|Game.exe -fl 快捷方式说明]] 启动并核对。 | ||
|} | |} | ||
| 第474行: | 第506行: | ||
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">Prj/GameCode/Client/Client/Game/Network/PacketHandler/LCRetCharLoginHandler.cpp</code> | | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">Prj/GameCode/Client/Client/Game/Network/PacketHandler/LCRetCharLoginHandler.cpp</code> | ||
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 客户端使用服务器下发的 GameServer 地址和端口。 | | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 客户端使用服务器下发的 GameServer 地址和端口。 | ||
|- | |||
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">Prj/GameCode/Client/Client/Game/Game.cpp</code>;<code style="white-space:normal;overflow-wrap:anywhere;">Prj/GameCode/Client/Client/Game/Procedure/GamePro_Login.h</code> | |||
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | Game.exe 的 -fl 启动参数检查,以及相对于运行目录读取 Patch/LoginServer.txt 的路径。 | |||
|- | |||
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">Prj/GameCode/Client/Client/Launch/PatchSystem.cpp</code>、<code style="white-space:normal;overflow-wrap:anywhere;">Downloader.cpp</code>、<code style="white-space:normal;overflow-wrap:anywhere;">LaunchDialog.cpp</code> | |||
| style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 登录器下载并重写区服列表的条件,以及启动 Game.exe 时传入 -fl 并设置其所在目录为工作目录。 | |||
|} | |} | ||
</div> | </div> | ||
2026年9月9日 (三) 17:33的最新版本
这篇说明适合已经能在服务器本机正常玩游戏,现在想让同一路由器下的朋友,或互联网上的朋友连接进来的人。操作使用文本编辑器和系统网络设置,不需要安装环境管理工具。
本文以所有服务端程序和数据库都在同一台 Windows 电脑上为例,使用一个登录程序和一个游戏程序。先完成局域网设置,确认另一台电脑能玩,再做公网设置。配置格式不同、服务分散在多台电脑上的情况,见后面的进阶说明。
配置清单 · 局域网 · 公网 · 内外网同时访问 · 验证与排查
先看要改哪些配置
主要修改两份不同的文件。一份在服务器电脑上,另一份在每位玩家的游戏客户端里。
| 文件在哪里 | 这份文件负责什么 |
|---|---|
服务器电脑:tlbb/Server/Config/ServerInfo.ini
|
告诉客户端应该连接哪些登录、游戏地址。IP0、IP(CNC)、IP(CTC)、IP(EDU) 及对应 Port 都在这份文件里修改。 |
玩家电脑:Client/Patch/LoginServer.txt
|
客户端显示区服列表并发起登录时读取它。里面是一行一行的区服记录,填写“IP:登录端口”,没有 [Server0] 或 IP(CNC)= 这样的配置。 |
如果你在服务器电脑上也启动客户端测试,两个文件虽然在同一台电脑上,仍然需要分别修改。给朋友的客户端也要带上改好的 LoginServer.txt;只修改服务器电脑上自己的客户端,朋友那一份不会自动更新。
为什么要分别改两份文件
- 玩家选择区服,客户端从 LoginServer.txt 读取登录地址,例如 192.168.50.10:14400,连接登录程序 Login。
- 玩家选择角色,Login 根据 ServerInfo.ini 告诉客户端游戏地址,例如 192.168.50.10:14401。
- 客户端再连接游戏程序 Server,进入场景。
所以“能登录账号”和“能进入游戏”是两次不同的连接。只改 LoginServer.txt,可能能看到角色,却在进入场景时连接失败。
这里的 IP 是要连接的电脑地址,端口 用来区分这台电脑上的不同服务。例如 192.168.50.10:14400 中,冒号前是 IP,冒号后是端口。本例 14400 用于登录,14401 用于游戏;客户端 LoginServer.txt 中的地址全部使用登录端口 14400。
修改前的准备
- 先确认在服务器本机能正常登录并进入场景。如果本机也不能玩,先处理原有启动或账号问题。
- 用平时的正常停服方式关闭服务端,等角色数据保存、ShareMemory 完成保存后再操作;同时关闭客户端。不要直接在任务管理器中强行结束保存程序。
- 各复制一份 ServerInfo.ini 和 LoginServer.txt 作为备份。编辑时保留原有文本编码;编辑器若显示 GBK 或 GB18030,保存时继续使用原编码。
- 找准实际运行的文件:服务端打开 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 设为只读的开关,再运行登录器或其他更新工具,文件仍可能被覆盖。
在玩家电脑按下面操作:
- 关闭游戏和已经打开的 Launch 登录器,先备份并确认 Client/Patch/LoginServer.txt 中是自己设置的 IP。
- 找到实际使用的 Game.exe。常见 32 位程序位于 Client/Bin/Game.exe,64 位程序位于 Client/Bin64/Game.exe;选择已经能在这台电脑上正常运行的那一份,不需要同时建两个快捷方式。
- 右键 Game.exe,选择“发送到 → 桌面快捷方式”;Windows 11 可能需要先点“显示更多选项”。
- 右键桌面上的快捷方式,打开“属性”,切换到“快捷方式”选项卡。
- 在“目标”中保留 Game.exe 的完整路径,在路径结束的引号外面加一个空格,再加 -fl。使用英文半角连字符、小写 f 和小写字母 l,最后不是数字 1。
- 将“起始位置”设为这个 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 防火墙”:
- 点击“入站规则”,再点“新建规则”。
- 规则类型选择“端口”。
- 选择“TCP”,在“特定本地端口”中填写 14400,14401。
- 选择“允许连接”。
- 勾选服务器当前联网连接使用的配置文件。Windows 网络属性显示“专用”就需勾选“专用”,显示“公用”就需勾选“公用”;不确定时先在系统网络设置中确认。
- 给规则起名,例如“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.ini、LoginInfo.ini
|
示例节名、ServerID、LoginID、端口及 ProxyConnect。 |
resources/Client/Patch/LoginServer.txt
|
目标区服记录与行尾空地址字段。 |
Prj/GameCode/Server/Tools/TlbbEnvironmentManager/TlbbEnvironmentManager.Core/PathsAndConfig.cs
|
外网设置修改的服务端键与客户端三个已填地址;仅作为参考来源,文章操作不依赖此工具。 |
Prj/GameCode/Common/ServerBase/Config.cpp、Config.h
|
线路字段启用条件、服务 ID 映射与代理来源识别。 |
Prj/GameCode/Common/Net/Socket.cpp、ServerSocket.cpp
|
IPv4 TCP、INADDR_ANY 监听。 |
Prj/GameCode/Server/Server/LoginServer/Login/Player/LoginPlayerManager.cpp;GameServer/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.cpp、LoginDataStructDef.h
|
区服行解析、四个登录地址与线路选择。 |
Prj/GameCode/Client/Client/Game/Network/PacketHandler/LCRetCharLoginHandler.cpp
|
客户端使用服务器下发的 GameServer 地址和端口。 |
Prj/GameCode/Client/Client/Game/Game.cpp;Prj/GameCode/Client/Client/Game/Procedure/GamePro_Login.h
|
Game.exe 的 -fl 启动参数检查,以及相对于运行目录读取 Patch/LoginServer.txt 的路径。 |
Prj/GameCode/Client/Client/Launch/PatchSystem.cpp、Downloader.cpp、LaunchDialog.cpp
|
登录器下载并重写区服列表的条件,以及启动 Game.exe 时传入 -fl 并设置其所在目录为工作目录。 |