我想制作服务器(用于多人游戏),但无法通过我的公共IP地址连接到我的电脑。我的服务器使用Java编程,如下所示:
int port = 60000;
int client_num = 0;
ClientHandler clientHandler;
try (ServerSocket serverSocket = new ServerSocket(port)) {
System.out.println("Server is listening on port " + port);
while (true) {
Socket client = serverSocket.accept();
System.out.println("New client connected: "+client);
}
} catch (IOException ex) {
System.out.println("Server exception: " + ex.getMessage());
ex.printStackTrace();
}
客户端使用javascript这样编程(我正在使用websockets:]
var websocket = new WebSocket(
'ws://127.0.0.1:60000');
websocket.onopen = function () {
$('h1').css('color', 'green');
websocket.send("Hello");
$('h1').css('color', 'purple');
};
您可以看到,我在服务器和客户端中都使用相同的端口(60 000)。在我写IP地址(ws://127.0.0.1)的客户端中,我可以写localhost(127.0.0.1)或我的私有ip(192.168.0.100)-并且可以正常工作!但是,当我在那里写我的公共IP(类似于91。。[。***)时,它不起作用,服务器也没有写消息“ New client connected:”(就像本地主机一样) )...所以我认为问题出在端口转发上。但是我试图向前移植,如您在图像中看到的:
但是它仍然不起作用。我还尝试在路由器中使用DMZ。结果相同。我还尝试关闭了我的抗病毒软件的防火墙和Web防护。同样的结果...即使我尝试通过一些在线测试(https://www.yougetsignal.com/tools/open-ports/)检查我的端口60 000是否打开,它也会说我的端口已关闭...那为什么它不起作用?我发现,即使我打开侦听端口80和443的Apache,用于检查打开端口的工具也会显示此端口(80和443)为关闭状态(即使我在路由器上打开DMZ)...为什么?注意:我确信,我使用正确的本地IP来设置端口转发和DMZ,我使用的IP给我ipconfig(并且正如我已经写的-当使用此本地地址(192.168.0.100时,客户端-服务器通信有效) )在我的PC上运行服务器...)请帮我! :)
您的问题与网络和网络路由有关。尝试从本地网络外部连接到服务器。来自互联网的某个地方。购买VPS或询问您的朋友。首先,您可以使用nmap
检查端口是否打开。如果已打开,则可以连接到服务器。否则,这可能是您的D-LINK问题。我看到您已经有22个端口转发。使用D-LINK DIR-600路由器时,我也遇到类似的问题-端口已正确调整,但无法通过打开的端口进行连接。而且我只能通过使用DD-WRT-非官方固件来解决此问题。