查看“︁工程参考/服务端外网设置”︁的源代码
来自天龙知识库
←
工程参考/服务端外网设置
跳到导航
跳到搜索
因为以下原因,您没有权限编辑该页面:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
__NOTOC__ <div class="server-network-reference" style="max-width:1200px;margin:0 auto;line-height:1.8;color:#29343a;font-family:Arial,'Microsoft YaHei',sans-serif;letter-spacing:0;overflow-wrap:anywhere;"> [[首页|首页]] · [[Lua接口/服务端函数索引|服务端接口]] 这篇说明适合已经能在服务器本机正常玩游戏,现在想让同一路由器下的朋友,或互联网上的朋友连接进来的人。操作使用文本编辑器和系统网络设置,不需要安装环境管理工具。 本文以'''所有服务端程序和数据库都在同一台 Windows 电脑上'''为例,使用一个登录程序和一个游戏程序。先完成局域网设置,确认另一台电脑能玩,再做公网设置。配置格式不同、服务分散在多台电脑上的情况,见后面的进阶说明。 [[#先看要改哪些配置|配置清单]] · [[#局域网设置|局域网]] · [[#公网设置|公网]] · [[#公网和局域网同时访问|内外网同时访问]] · [[#验证与排查|验证与排查]] == 先看要改哪些配置 == 主要修改'''两份不同的文件'''。一份在服务器电脑上,另一份在每位玩家的游戏客户端里。 {| class="wikitable" style="width:100%;table-layout:fixed;border-collapse:collapse;font-size:13px;" ! scope="col" style="text-align:left;background:#edf3f2;padding:8px;" | 文件在哪里 ! scope="col" style="text-align:left;background:#edf3f2;padding:8px;" | 这份文件负责什么 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | '''服务器电脑''':<code style="white-space:normal;overflow-wrap:anywhere;">tlbb/Server/Config/ServerInfo.ini</code> | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 告诉客户端应该连接哪些登录、游戏地址。IP0、IP(CNC)、IP(CTC)、IP(EDU) 及对应 Port 都在这份文件里修改。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | '''玩家电脑''':<code style="white-space:normal;overflow-wrap:anywhere;">Client/Patch/LoginServer.txt</code> | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 客户端显示区服列表并发起登录时读取它。里面是一行一行的区服记录,填写“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 并回车,再输入: <pre style="white-space:pre-wrap;overflow-wrap:anywhere;font-size:13px;line-height:1.7;padding:12px;background:#f5f7f8;border:1px solid #dbe3e6;">ipconfig</pre> 找到当前联网的“以太网”或“无线局域网”适配器,记下它的 '''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'''。 <pre style="white-space:pre-wrap;overflow-wrap:anywhere;font-size:13px;line-height:1.7;padding:12px;background:#f5f7f8;border:1px solid #dbe3e6;">[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</pre> ==== B. 仍在 ServerInfo.ini 文件里的 [Server1]:登录地址 ==== 继续找到原有 [Server1],把以下 IP 项改为同一个局域网 IP;这一组的四个端口都使用 '''登录端口 14400'''。 <pre style="white-space:pre-wrap;overflow-wrap:anywhere;font-size:13px;line-height:1.7;padding:12px;background:#f5f7f8;border:1px solid #dbe3e6;">[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</pre> 两个片段之间原来还有其他配置,全部保留;不要重复添加 [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'''。 以下是本例修改后的完整一行;如果你的前半行内容不同,保留你自己的前半行: <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,192.168.50.10:14400,192.168.50.10:14400,192.168.50.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;">192.168.50.10:14400,192.168.50.10:14400,192.168.50.10:14400,</pre> * 第一个地址: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,快捷方式“目标”填写: <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 对参数检查可能不同,实际启动及文件保留效果'''需要实测'''。 === 第三步:在服务器电脑允许两个端口通过防火墙 === 这一步让别的电脑能访问登录和游戏程序。'''在服务器电脑上'''按 Win+R,输入 <code style="white-space:normal;overflow-wrap:anywhere;">wf.msc</code> 并回车,打开“高级安全 Windows 防火墙”: # 点击“入站规则”,再点“新建规则”。 # 规则类型选择“端口”。 # 选择“TCP”,在“特定本地端口”中填写 '''14400,14401'''。 # 选择“允许连接”。 # 勾选服务器当前联网连接使用的配置文件。Windows 网络属性显示“专用”就需勾选“专用”,显示“公用”就需勾选“公用”;不确定时先在系统网络设置中确认。 # 给规则起名,例如“TLBB 登录与游戏”,保存规则。 纯局域网使用时,可在规则属性的“作用域”中将远程 IP 限制为实际玩家地址或网段。后来开放公网时,也要重新确认这个范围允许外网玩家;云服务器还要设置后文的云安全组。不要为了测试而关闭整个防火墙。 如果仍然不通,检查玩家是否连到访客 Wi-Fi,路由器是否启用了“客户端隔离”;这些功能可能不允许两台电脑互相连接。 === 第四步:启动服务,用另一台电脑进游戏 === 按平时手工开服的流程启动。依赖顺序为:数据库就绪,再依次启动 ShareMemory、Billing、World、Login、Server;每一步确认正常后再继续。这次只改网络地址,原有启动参数保持不变。 从同一路由器下的'''另一台玩家电脑'''打开改好的客户端,选择目标区服,登录账号、选择角色并进入场景。能进入并正常移动,才算完成局域网这一步;只在服务器本机测试不足以证明朋友也能连。失败时按 [[#验证与排查|验证与排查]] 检查,不要急着继续改公网。 == 公网设置 == 公网就是让不在你家局域网里的朋友,通过互联网连接进来。家用路由器部署通常需要两个地址:'''服务器的内网 IP''' 和 '''宽带的公网 IP'''。 {| class="wikitable" style="width:100%;table-layout:fixed;border-collapse:collapse;font-size:13px;" ! scope="col" style="text-align:left;background:#edf3f2;padding:8px;" | 本例地址 ! scope="col" style="text-align:left;background:#edf3f2;padding:8px;" | 填在什么地方 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">192.168.50.10</code>:服务器内网 IP | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 服务器网卡继续使用它;路由器把收到的连接转发到这个地址。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">203.0.113.10</code>:假设的公网 IP | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 服务端向玩家提供的地址、玩家客户端的登录地址改为它。此地址仅供文档举例,必须换成自己的真实公网 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]:公网游戏地址 ==== <pre style="white-space:pre-wrap;overflow-wrap:anywhere;font-size:13px;line-height:1.7;padding:12px;background:#f5f7f8;border:1px solid #dbe3e6;">[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</pre> ==== B. ServerInfo.ini 的 [Server1]:公网登录地址 ==== <pre style="white-space:pre-wrap;overflow-wrap:anywhere;font-size:13px;line-height:1.7;padding:12px;background:#f5f7f8;border:1px solid #dbe3e6;">[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</pre> 只替换原有组里的这些项目,保留其他行。服务器网卡仍使用原来的内网 IP;同机内部的 IP1、World、Billing、数据库地址也保持原配置。不要把路由器的公网 IP 填到服务器的网卡设置里。 === 第三步:把玩家的 LoginServer.txt 改为公网登录地址 === 关闭客户端,打开 '''Client/Patch/LoginServer.txt''',找到同一个目标区服,把已填写的登录地址改成 '''真实公网 IP:14400'''。本例修改后的完整一行是: <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 快捷方式说明]] 启动,避免列表又被下载覆盖。到这一步,两份文件里的玩家连接地址已经改为公网,下面还要让路由器把连接送到服务器。 === 第四步:在路由器添加两条端口转发 === 在'''路由器管理页面'''找到“端口转发”,也可能叫“虚拟服务器”或“NAT 转发”。它的作用是:朋友访问你的公网 IP 时,路由器知道应转交给内网的哪台电脑。 新建'''登录'''和'''游戏'''两条规则,按下面填写。目标 IP 使用服务器的'''内网 IP''',不是公网 IP,也不是路由器自己的地址。 {| class="wikitable" style="width:100%;table-layout:fixed;border-collapse:collapse;font-size:13px;" ! scope="col" style="text-align:left;background:#edf3f2;padding:8px;" | 路由器界面中的项目 ! scope="col" style="text-align:left;background:#edf3f2;padding:8px;" | 应该填写什么 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 规则名称 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 第一条叫“TLBB 登录”;第二条叫“TLBB 游戏”,名称便于自己识别。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 协议 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 两条均选择 TCP。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 内部 IP / 目标 IP / 服务器 IP | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 两条均填服务器内网 IP,本例 192.168.50.10。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 外部端口 / 公共端口 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 登录规则填 14400,游戏规则填 14401。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 内部端口 / 本地端口 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 登录规则同样填 14400,游戏规则同样填 14401。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 启用状态 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 两条都启用并保存。 |} 如果界面要求填写“起始端口”和“结束端口”,一条规则的起止端口填同一个数。例如登录规则两格都填 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 也不会自动成为给内网玩家返回的地址。 {| class="wikitable" style="width:100%;table-layout:fixed;border-collapse:collapse;font-size:13px;" ! scope="col" style="text-align:left;background:#edf3f2;padding:8px;" | 方案 ! scope="col" style="text-align:left;background:#edf3f2;padding:8px;" | 设置与前提 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 同一个公网入口,路由器支持 NAT 回环 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 服务端和客户端统一使用公网示例。路由器必须支持并启用 NAT loopback / hairpin NAT,让局域网玩家访问公网登录、游戏端口时正确转回内网。必须用一台局域网客户端实测两个端口及完整进游戏。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 所有玩家通过 VPN 组网 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | VPN 可让不同地点的电脑加入一个虚拟内部网络。所有玩家和服务器都加入并能互相连接后,可按局域网步骤使用服务器的 VPN IPv4。没有加入的普通公网玩家不能直接使用这个地址,实际组网效果需要实测。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 路由器不支持回环,且希望维持普通公网入口 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 需要调整路由/更换支持回环的设备,或专门设计能正确返回内外地址的代理方案。不能承诺只修改本文几个 IP 就同时连通。 |} 在服务器本机测试公网 IP 也可能遇到 NAT 回环限制。先分别用局域网另一台电脑与真正的外网电脑测试,避免把“内网访问自己的公网地址失败”误判为公网服务不可达。 只修改 hosts、做域名内外分流,不能修正本文服务端直接下发的数字 IP;不同来源返回不同地址的代理方案需要同时核对登录、进入场景以及后续换服连接,需要实测。 == 验证与排查 == === 1. 服务器上检查监听 === “监听”表示程序已经启动,并在等待其他电脑连接。'''在服务器电脑上'''从开始菜单搜索并打开 PowerShell,输入以下命令;命令中的 14400、14401 要与实际设置一致: <pre style="white-space:pre-wrap;overflow-wrap:anywhere;font-size:13px;line-height:1.7;padding:12px;background:#f5f7f8;border:1px solid #dbe3e6;">Get-NetTCPConnection -State Listen -LocalPort 14400,14401 | Select-Object LocalAddress,LocalPort,OwningProcess</pre> 结果应有 14400 和 14401 两个端口。LocalPort 是本地端口,OwningProcess 是占用它的程序编号(PID);LocalAddress 显示 0.0.0.0 通常表示正在本机所有 IPv4 网络接口上等待连接,属于正常情况。 要确认是否由正确程序占用,将下一条命令中的 1234 换成对应行的 OwningProcess 数字,再执行: <pre style="white-space:pre-wrap;overflow-wrap:anywhere;font-size:13px;line-height:1.7;padding:12px;background:#f5f7f8;border:1px solid #dbe3e6;">Get-Process -Id 1234 | Select-Object Id,ProcessName,Path</pre> 登录端口对应 Login,游戏端口对应 Server;有些部署的程序名使用 LoginServer、GameServer。查询无记录、报未找到对象或只有一个端口时,先查该服务是否启动成功、实际读取哪个 Config 文件夹,以及是否被别的程序占用了端口。 === 2. 从局域网玩家电脑测试 === 这次到'''另一台玩家电脑'''打开 PowerShell,输入以下两条命令。将 192.168.50.10 换成服务器的实际内网 IP: <pre style="white-space:pre-wrap;overflow-wrap:anywhere;font-size:13px;line-height:1.7;padding:12px;background:#f5f7f8;border:1px solid #dbe3e6;">Test-NetConnection -ComputerName 192.168.50.10 -Port 14400 Test-NetConnection -ComputerName 192.168.50.10 -Port 14401</pre> 分别查看结果中的 '''TcpTestSucceeded''':True 表示这个端口可以连接,False 表示连接没有成功。14400 为 True、14401 为 False 时,应先处理游戏端口,而不是继续改客户端的登录端口。 两个 True 只证明网络端口能连接,还要实际登录、选角、进入场景;不能据此断定账号或数据库都正常。旧系统没有这些 PowerShell 命令时,可用 netstat -ano 检查服务器监听,并用其他 TCP 连通性工具从玩家电脑测端口。 === 3. 从真正的外网测试 === 使用未连接服务器局域网的另一台电脑,例如手机热点下的电脑;将下列文档 IP 换成实际公网 IP: <pre style="white-space:pre-wrap;overflow-wrap:anywhere;font-size:13px;line-height:1.7;padding:12px;background:#f5f7f8;border:1px solid #dbe3e6;">Test-NetConnection -ComputerName 203.0.113.10 -Port 14400 Test-NetConnection -ComputerName 203.0.113.10 -Port 14401</pre> 两项都成功后,再用对应客户端实际选择区服、登录账号、选择角色并进入场景,确认能够移动;有多游戏进程时还要测试相应换场景连接。需要内外网同时使用时,在局域网客户端重复完整流程。能 ping 通不代表 TCP 端口开放,ping 不通也不代表 TCP 一定不通。 === 按失败阶段定位 === {| class="wikitable" style="width:100%;table-layout:fixed;border-collapse:collapse;font-size:13px;" ! scope="col" style="text-align:left;background:#edf3f2;padding:8px;" | 现象 ! scope="col" style="text-align:left;background:#edf3f2;padding:8px;" | 优先核对 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 目标区服不显示或显示异常 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 实际读取的 LoginServer.txt、文件编码、SERVER_BEGIN/END、目标记录是否同一行、字段数量和行尾逗号;本机改的文件是否同步给玩家。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 14400/14401 在服务器上没有监听 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | Login/Server 是否正常启动;是否改了资源副本而非部署文件;端口冲突、World/数据库等依赖错误。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 本机可测通,局域网电脑测不通 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 服务器实际内网 IP、主机防火墙配置文件与来源范围、访客 Wi-Fi 隔离、虚拟机网络模式和路由。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 局域网通,真正外网两个端口不通 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 公网入口是否可控、双重 NAT/运营商 NAT、两个 TCP 转发、映射内网 IP、云安全组及上游入站限制。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 能登录或看到角色,进入游戏失败 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | GameServer 返回的 IP/端口、14401 映射与监听;所有被选中的 IP(CNC/CTC/EDU) 是否还指向旧地址;Login 与游戏配置是否同步。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 只在切换线路后失败 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 客户端备用登录地址及第四地址、服务器对应线路的 IP/Port、ProxyConnect 与代理来源识别配置。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 外网可玩,内网使用公网入口失败 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 路由器 NAT 回环,以及登录成功后返回的游戏地址。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 端口都通但认证或进场景仍失败 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 账号、Billing/数据库、World 与游戏进程就绪情况、客户端和服务端资源是否匹配;结合日志定位,不能仅凭 TCP 成功排除业务故障。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 修改后仍连接旧地址 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 是否启动了另一份客户端/服务端、进程是否重启、更新器是否覆盖了 LoginServer.txt、线路地址是否漏改。手工列表可按 [[#用快捷方式直接启动游戏,保留手工设置的 IP|Game.exe -fl 快捷方式说明]] 启动并核对。 |} Login 日志中的 <code style="white-space:normal;overflow-wrap:anywhere;">WLRetCharLoginHandler::Execute()</code> 成功记录包含下发的 IP、Port、SID,可用于核对进入游戏时真正使用的地址。若它下发的地址本身不可达,继续修改客户端初始登录地址不会修复这一段。 === 验收与恢复 === * 监听进程正确;局域网或公网目标玩家能访问两个实际 TCP 端口。 * 同一份已更新客户端能够登录、选角、进场景;需要同时支持的网络和线路分别完成实测。 * World、Billing、数据库和管理入口未因这次配置被一并暴露给玩家。 * 如修改后异常,正常停服,恢复备份的服务端配置和各份客户端列表,恢复本次改动的映射/防火墙规则,再按原流程启动。不要回滚未参与本次修改的其他设置。 == 进阶说明 == 以下内容用于配置与示例不同,或需要进一步定位问题时查阅。 === 地址与端口的区别 === {| class="wikitable" style="width:100%;table-layout:fixed;border-collapse:collapse;font-size:13px;" ! scope="col" style="text-align:left;background:#edf3f2;padding:8px;" | 地址或配置项 ! scope="col" style="text-align:left;background:#edf3f2;padding:8px;" | 含义 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">127.0.0.1</code> | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 代表发起连接的电脑自己。同机服务之间可以用;如果写进朋友的客户端登录地址,指向的会是朋友自己的电脑。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">0.0.0.0</code> | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 在系统监听结果中通常表示本机所有 IPv4 接口;不能作为发给玩家的连接地址。它写在线路配置中,也不表示禁用线路。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">IP0 / Port0</code> | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | ServerInfo.ini 登录/游戏组中的默认玩家地址和端口。当前程序用 Port0 开始监听连接,默认也把这个端口告诉客户端。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">IP1 / Port1</code> | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | ServerInfo.ini 中用于服务端内部配置;不是让内网玩家连接的第二组登录/游戏地址。 |} 当前程序用 IPv4 TCP,在本机所有 IPv4 接口上监听指定端口,源码名称为 INADDR_ANY。因此路由器转发的部署中,IP0 可以是路由器公网 IP,而服务器网卡继续使用内网 IP。本文使用数字 IPv4;域名、IPv6 和不同客户端的处理方式需要另行核对。 === 同机部署通常保留的内部配置 === {| class="wikitable" style="width:100%;table-layout:fixed;border-collapse:collapse;font-size:13px;" ! scope="col" style="text-align:left;background:#edf3f2;padding:8px;" | 文件内的位置 ! scope="col" style="text-align:left;background:#edf3f2;padding:8px;" | 资源文件的示例值 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">ServerInfo.ini [World] IP / Port</code> | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">127.0.0.1 / 777</code>,连接 World 服务。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">ServerInfo.ini [Billing] IP0 / Port0</code> | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">127.0.0.1 / 10101</code>,连接 Billing 服务;此处 IP0 不是玩家游戏地址。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">ServerInfo.ini [Server0] IP1 / Port1</code> | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">127.0.0.1 / 8880</code>,保留内部配置。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">ServerInfo.ini [Server1] IP1 / Port1</code> | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">127.0.0.1 / 8882</code>,保留内部配置。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">LoginInfo.ini、ShareMemInfo.ini、BillingInfo.ini</code> 的 <code style="white-space:normal;overflow-wrap:anywhere;">[System] DBIP / DBPort</code> | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">127.0.0.1 / 3306</code>,连接数据库;实际已使用其他数据库端口时保留原值。 |} 这些是资源文件的示例,不是让你开放的端口清单。服务配置里“连接到 127.0.0.1”,也不能证明另一个服务只接收本机连接;要看其实际监听与防火墙。World、Billing、数据库和管理端口应限制为需要它们的服务电脑才能访问。 === 配置编号不同怎么办 === {| class="wikitable" style="width:100%;table-layout:fixed;border-collapse:collapse;font-size:13px;" ! scope="col" style="text-align:left;background:#edf3f2;padding:8px;" | 本例配置 ! scope="col" style="text-align:left;background:#edf3f2;padding:8px;" | 如何识别 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">ServerInfo.ini [Server0]</code> 下的 <code style="white-space:normal;overflow-wrap:anywhere;">ServerID=0、Type=0</code> | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | Type=0 表示游戏服务。本例 CurrentServerID=0 对应这个服务。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">ServerInfo.ini [Server1]</code> 下的 <code style="white-space:normal;overflow-wrap:anywhere;">ServerID=2、Type=1</code> | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | Type=1 表示登录服务。LoginInfo.ini 的 [System] LoginID=2 对应 ServerID=2。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">[Server1]</code> 与 <code style="white-space:normal;overflow-wrap:anywhere;">ServerID=2</code> | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 前者是配置组名称,后者是服务编号;数字不要求相同。不要为了改地址而重编号。 |} 布局与示例不同时,按 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 中所有已填登录地址的端口,以及相应防火墙和转发规则。公网端口与内网端口不同的代理方案需要单独核对,不能直接套用本文同端口的例子。 <span id="线路字段与多机部署"></span> === 为什么需要核对运营商地址 === 资源配置中 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、独立代理及跨服连接的具体效果需要实测。 == 核对依据与适用范围 == 字段及调用路径已对照当前源码和资源配置核对;本文示例没有在真实公网、路由器或游戏进程中执行,完整连接效果'''需要实测'''。同名配置在其他实现中可能有不同含义,应先确认实际运行程序与配置布局一致。 {| class="wikitable" style="width:100%;table-layout:fixed;border-collapse:collapse;font-size:13px;" ! scope="col" style="text-align:left;background:#edf3f2;padding:8px;" | 源码或资源位置(相对项目目录) ! scope="col" style="text-align:left;background:#edf3f2;padding:8px;" | 用于核对 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">resources/Server/Config/ServerInfo.ini</code>、<code style="white-space:normal;overflow-wrap:anywhere;">LoginInfo.ini</code> | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 示例节名、ServerID、LoginID、端口及 ProxyConnect。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">resources/Client/Patch/LoginServer.txt</code> | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 目标区服记录与行尾空地址字段。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">Prj/GameCode/Server/Tools/TlbbEnvironmentManager/TlbbEnvironmentManager.Core/PathsAndConfig.cs</code> | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 外网设置修改的服务端键与客户端三个已填地址;仅作为参考来源,文章操作不依赖此工具。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">Prj/GameCode/Common/ServerBase/Config.cpp</code>、<code style="white-space:normal;overflow-wrap:anywhere;">Config.h</code> | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 线路字段启用条件、服务 ID 映射与代理来源识别。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">Prj/GameCode/Common/Net/Socket.cpp</code>、<code style="white-space:normal;overflow-wrap:anywhere;">ServerSocket.cpp</code> | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | IPv4 TCP、INADDR_ANY 监听。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">Prj/GameCode/Server/Server/LoginServer/Login/Player/LoginPlayerManager.cpp</code>;<code style="white-space:normal;overflow-wrap:anywhere;">GameServer/Server/Player/IncomingPlayerManager.cpp</code> | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | Login 与 GameServer 从 Port0 建立玩家端监听。后一个路径相对同级 Server/Server。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">Prj/GameCode/Server/Server/LoginServer/Login/Packets/WLRetCharLoginHandler.cpp</code>;同一 Login 目录的 <code style="white-space:normal;overflow-wrap:anywhere;">Player/LoginPlayer.cpp</code> | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 进入游戏时下发游戏地址、线路选择及默认回退。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">Prj/GameCode/Client/Client/Game/Procedure/GamePro_Login.cpp</code>、<code style="white-space:normal;overflow-wrap:anywhere;">LoginDataStructDef.h</code> | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 区服行解析、四个登录地址与线路选择。 |- | 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;" | <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>
返回
工程参考/服务端外网设置
。
导航菜单
页面操作
页面
讨论
阅读
查看源代码
历史
页面操作
页面
讨论
更多
工具
个人工具
创建账号
登录
导航
首页
最近更改
随机页面
MediaWiki帮助
特殊页面
搜索
工具
链入页面
相关更改
页面信息