我正在编写一个使用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。
如果你能帮助我找出为什么我无法通过互联网连接到这个端口,我将非常感激。
答案 0 :(得分:0)
您尚未正确转发端口。与代码无关。
正如@EJP建议的那样,我的代码似乎没有任何问题。我已经使用Amazon EC2托管了这个服务器应用程序,并且它运行得很完美。
我的路由器的固件存在问题,导致端口转发无效。