我正在尝试设置一个服务器供我儿子玩Pocketmine
。这是一台PHP
服务器,它在端口 19132 上运行。我已在路由器上打开此端口,如果我运行另一台服务器(例如 Rails 服务器),那么一切都很好。当我尝试运行时Pocketmine
,端口从未打开。我现在服务器正在运行。这是我的netstat
输出。
您可以看到服务器,它是第一行,它是udp port
.我看到它没有 的状态LISTEN
。这是我的服务器的输出。
可能是什么问题呢?为什么udp
服务器不是 的状态LISTEN
?它需要处于 的状态吗LISTEN
?还有什么问题会导致端口无法打开?我该怎么做才能解决这个问题?
答案1
您在“我的世界”服务器端口上看不到的原因LISTEN
是 UDP 协议的工作方式所致。
使用 TCP 协议的服务器“侦听”连接,以便当客户端尝试连接时,它将开始会话并使用 TCP/IP 协议传输数据。如果某个端口上没有任何内容“侦听”TCP 连接,则协议本身可能会生成错误,指出它无法连接到正在侦听某个端口的服务器。
UDP 连接没有会话,因此它们不会“侦听”连接。实际发生的情况是,UDP 数据包被发送到该端口,如果有服务器在该端口上接收数据包,则数据将被处理。否则,如果没有任何东西接收数据包,那么该数据包就会消失在虚空中,并且不会在协议级别上产生错误。
事实上,您可以在 netstat 上看到端口 19132,这意味着在 UDP 世界中,服务器正在“侦听”该端口上的数据,这意味着该端口实际上是开放的。
答案2
想法#1 - UDP 端口转发?
确认在路由器上打开此端口时,您指定了 TCP/UDP 或 UDP。这些端口的类型很重要,在防火墙/路由器上打开端口时经常会被忽略。
想法 #2 - 移植 Pocketmine 领域问题?
我发现这个论坛帖子听起来正是您遇到的问题。它甚至显示了该特定用户用于打开其路由器上的 UDP 端口的屏幕截图,但他仍然无法使其正常工作。