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 托管了这个服务器应用程序,它运行得非常完美。
我的路由器固件有问题,阻止了端口转发。
我正在编写一个使用 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 托管了这个服务器应用程序,它运行得非常完美。
我的路由器固件有问题,阻止了端口转发。