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

时间:2015-04-10 22:19:59

标签: java networking blocking channel datagram

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

在跑步的同时,如果我使用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,其中注释掉的版本将获取计算机的公共IP。

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

1 个答案:

答案 0 :(得分:0)

  

您尚未正确转发端口。与代码无关。

正如@EJP建议的那样,我的代码似乎没有任何问题。我已经使用Amazon EC2托管了这个服务器应用程序,并且它运行得很完美。

我的路由器的固件存在问题,导致端口转发无效。