Java DatagramChannel - 无法从外部网络 ping 端口

Java DatagramChannel - Cannot ping port from external network

我正在编写一个使用 DatagramChannel(非阻塞)到 send/receive 数据的服务器。它在我的本地网络上运行完美,但如果我尝试使用来自不同网络(即通过 Internet)的客户端应用程序连接到它,我将无法访问它。

而运行,如果我使用http://ping.eu/port-chk/检查端口,它说它已关闭。我已经转发了适当的端口并将防火墙调整到适当的级别。

我的代码如下:

public void runServer(int portNo)
{

    try
    {
        serverChannel = DatagramChannel.open();
        ipAddress = InetAddress.getLocalHost();
        //ipAddress = InetAddress.getByName(getPublicIP());
        //serverChannel.setOption(StandardSocketOptions.SO_REUSEADDR, true); //Added in to try to fix
        serverChannel.socket().bind(new InetSocketAddress(portNo));
        serverChannel.configureBlocking(false);
        serverChannel.socket().setReceiveBufferSize(receiveBufferSize);
        serverChannel.socket().setSendBufferSize(sendBufferSize);
        //serverChannel.connect(new InetSocketAddress(ipAddress,portNo)); //Added in to try to fix

        serverRunning = true;
    }
    catch(IOException e)
    {
        e.printStackTrace();
    }


}

注释掉的部分没有效果。示例中的 ipAddress 变量将获取本地 IP,而注释掉的版本将获取计算机的 public IP。

如果你能帮我找出为什么我不能通过互联网连接到这个端口,我将不胜感激。

You haven't forwarded the ports correctly. Nothing to do with the code.

正如@EJP 所建议的,我的代码似乎没有任何问题。从那以后,我使用 Amazon EC2 托管了这个服务器应用程序,它运行得非常完美。

我的路由器固件有问题,阻止了端口转发。