单机传奇网关只显示端口绑定0.0.0.0:7000不出连接到127.0.0.1:5500的排查全过程

来源: 作者: 点击:
一、先把这两行字认清

网关窗口启动后会打印两行信息,很多人把这两行看成一句。第一行端口绑定(0.0.0.0:7000),说的是这个网关给自己开了一个监听端口号7000,前面那串0.0.0.0是监听地址,意思是本机所有网卡都收,客户端从127.0.0.1过来能连,从局域网IP过来也能连。这行出来了,只能证明网关这个进程活着,端口占住了,别的什么也证明不了。

第二行连接到(127.0.0.1:5500),说的是网关掉头去连它后面的那台服务,地址127.0.0.1,端口5500。5500是服务端里真正处理登录或转发的那个程序在听的端口。这一行出来,才算网关和后面握上了手。

两行各管一截。你现在只有第一行,等于网关自己站住了,但它伸出去的那只手没抓上。问题不在7000上,在5500那头。

二、网关连不上后面的服务,先看谁在5500上听着

打开命令行,敲 netstat -ano | findstr 5500。看两件事:一是有没有记录,二是那条记录的状态是不是LISTENING。

如果一条都没有,说明5500上根本没人听,后面的服务没起来。如果有一条LISTENING,记下最后一列那个进程号,去任务管理器对一下这个号是谁。对不上预期的那台服务,就是端口被别的程序占了,后面那台服务启动时绑不上5500,多半悄悄退了或者弹了报错框没人看见。

再补一步,敲 telnet 127.0.0.1 5500。窗口变空白就是通,提示无法打开连接就是不通。这一步能排除防火墙一类的拦截。

三、两边端口对不上,是最扎堆的一种

网关要连的端口,和后面服务在听的端口,得是一个数。偏偏这两个数写在两个地方,改一处忘一处就出事。

先看网关的配置文件。不同端名字不一样,常见的是网关目录下的 Gate.ini、LoginGate.ini、GateConfig.ini、Mirgate.ini。里面通常有两组字段,一组是这个网关自己听的(ListenIP、ListenPort 或者 ServerPort 里的其一),另一组是它要去连的服务(ServerIP、ConnectIP、上游端口)。你要连的5500,就该出现在它要去连的那组里。如果那里写的是5600、6000或者别的数,而后面服务实际在5500上,那就永远连不上。

再看后面那台服务的配置。它的监听端口如果被改成了别的值,网关这边还按5500去连,也是白搭。两边必须一样。

自己一个人架的端,最省事的做法是打开引擎控制器,重新走一遍配置向导,让它把两边的端口一次性写齐。手工改过某个文件之后,向导生成的配置往往和手改的对不上,这种半路改出来的错最难查。

四、服务没起来,或者起来后被杀了

网关连不上,最常见的其实是后面那台服务压根没在跑。

按顺序把服务端组件过一遍,数据库、登录服务、登录网关、角色网关、游戏网关、主引擎,该亮的都在。少一个,链路就断。

杀毒软件是个老坑。登录网关、游戏网关这类程序被误判拦掉、直接清掉的例子不少。排查时先把防护临时关了,或者把服务端整个目录加进白名单,再看网关那一行出不出来。刚才还在、现在没了,多半是它干的。

五、启动顺序这件事,很多人栽在这

网关是先连后等,不是先等后连。你如果在后面那台服务还没起来的时候就把网关拉起来了,它连一次没连上,有的引擎会隔几秒重试,有的重试几次就彻底放弃,窗口上那行连接到就一直不出现,看着像坏了,其实上游一直没开。

所以正确顺序是:数据库先起,后面那台被连的服务起好,等它自己那一行监听打印出来,再起网关。中途有谁挂了重启,网关跟着一起重启。不要指望它自己缓过来。

六、网关自己的目标地址填错

有种情况是端口没错,地址错了。网关配置里那行"要去连的服务地址",如果被人填成了一个具体的网卡IP,比如192.168.1.100,而后面那台服务只绑在127.0.0.1上,本机回环连不过去。单机架设,这个地址就老老实实写127.0.0.1。

还有一种更隐蔽的:这行前面被加了分号。INI文件里分号是注释符,加了分号这行就不生效,网关会去用它内置的默认值,你改了半天以为生效了,其实根本没读。改完别忘了把行首的分号删掉。

七、5500被占和残留进程

服务端没关干净,上一个网关进程还挂在内存里,7000被它占着,新拉起来的实例要么起不来,要么起来了但行为怪。也就是常说的幽灵进程。

到任务管理器里找带Gate字样和带引擎字样的进程,全部结束,再重新按顺序启动。命令行也行,taskkill /F /IM 网关程序名.exe,挨个清一遍。

5500本身被占也一样。刚才的netstat已经能看出来,找到占用它的进程结束掉,或者把后面服务的端口挪到一个没人用的值,同时回头把网关的目标端口改成同一个新值。

八、几个容易看走眼的点

0.0.0.0:7000这行正常,别盯着它改。它只是说监听范围,不是"没连上"的证据。把7000改成127.0.0.1反而会让局域网连不进来,单机自己玩也未必想这样。

端口冲突不一定报"地址已被占用"。有的程序绑不上就自己退了,窗口一闪,没有任何提示。所以别只看窗口,要看netstat。

多开或者以前开过区,端口整体错开了,配置文件里还留着旧的端口号。翻配置时把旧值一并清掉。

引擎控制器里有个动态IP模式的勾选项。单机做测试时不需要它,勾上会引入额外的检测,容易把本地回环的通信搅乱,单机就取消掉。

九、动手的顺序

先netstat确认5500上有没有人听、状态对不对。没人听,就按数据库、服务、网关的顺序重新起,先把后面那台服务起稳。有人听但连不上,去核两边端口是不是同一个数,网关要去连的那行地址是不是127.0.0.1、分号删没删。都对还是不行,清一遍残留进程重来。改完网关配置,网关必须重启才读新值,改完后面服务的端口,那台服务也要重启。

按这个顺序走,卡在端口绑定那一行的情况基本都能定位。多数时候不是网关坏了,是它背后那台服务还没准备好,或者两边嘴上说的端口不是同一个数。