【问题标题】:Java DatagramChannel - Cannot ping port from external networkJava DatagramChannel - 无法从外部网络 ping 端口
【发布时间】:2015-06-16 18:27:57
【问题描述】:

我正在编写一个使用 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。

如果您能帮助我找出我无法通过 Internet 连接到此端口的原因,我将不胜感激。

【问题讨论】:

  • 您没有正确转发端口。与代码无关。离题。
  • @EJP 代码是否保持原样,即没有取消注释注释行?
  • 如果我添加:System.out.println("Server: CHANNEL SOCKET LOCAL IP: "+serverChannel.socket().getLocalAddress()+" | CHANNEL SOCKET REMOTE IP: "+serverChannel.socket().getRemoteSocketAddress()+" | CHANNEL SOCKET PORT: "+serverChannel.socket().getPort()+" | CHANNEL SOCKET LOCAL PORT: "+serverChannel.socket().getLocalPort());,它会打印出:“服务器:通道套接字本地 IP:/0:0:0:0:0:0:0:0 | CHANNEL SOCKET REMOTE IP: null | CHANNEL SOCKET PORT: -1 | CHANNEL SOCKET LOCAL PORT: 8888"
  • 仅供参考,我为 TCP/UDP 设置了端口转发端口 8888-9000,为我的 PC 设置了 DMZ,并关闭了防火墙。我有一个 ServerSocket 在端口 9000 上的这个程序(TCP)内的不同线程上运行,并且可以完美地被 ping 通@EJP
  • 所以你已经完美地打开了 TCP 端口,而不是 UDP 端口。

标签: java networking blocking channel datagram


【解决方案1】:

您没有正确转发端口。与代码无关。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-19
    • 2020-08-16
    • 2016-07-26
    • 1970-01-01
    • 2015-11-08
    • 2013-12-22
    • 1970-01-01
    相关资源
    最近更新 更多