我开发了一个聊天应用程序Java / Socket(TCP),它在我的本地网络上运行得很好,但是当我把它放在路由器后面它不起作用... 我已经测试了路由器上的开放端口: http://www.yougetsignal.com/tools/open-ports/ 结果如下
80 (HTTP)is open
21 (FTP)is open
22 (SSH)22 is open
23 (TELNET)is open
25 (SMTP)25 is open
.
.
.
我使用此端口列表(java -jar server.jar 23
)启动了我的服务器:
int port=Integer.parseInt(args[0]);
ServerSocket serverSocket = null;
serverSocket = new ServerSocket(port);
System.out.println("server started at " + port);
Socket clientSocket = null ;
// repeatedly wait for connections, and process
while (true) {
try {
clientSocket = serverSocket.accept();
} catch (IOException ex) {
System.out.Println("error");
}
System.err.println("new client connected!");
in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(clientSocket.getOutputStream())),true);
String s;
while ((s = in.readLine()) != null) {
out.println("from server: "+s);
}
// colse all
out.close();
in.close();
clientSocket.close();
然后用一个简单的客户端我试着连接=>收到任何东西....
问题在哪里?那么Skype,Msn和其他聊天应用程序如何工作正常? 有一个解决方案吗?PS:我放了一个代表我真实服务器的简单代码(echo服务器),以便您快速了解我的代码:)。
我的问候。
答案 0 :(得分:2)
这只是猜测,您是否已进入路由器的配置实用程序并将其设置为代理(通常称为端口转发)telnet请求到客户端?您的路由器可能正在侦听23,但除非您在路由器的固件上运行聊天客户端,否则我怀疑它知道如何处理该流量。也许我误解了你的问题。
答案 1 :(得分:1)
仅在服务器后面运行服务器对于外部客户端建立连接是不够的。无论服务器正在侦听哪个端口,路由器都需要在其上配置端口转发规则,该规则将该端口的入站流量转发到运行服务器的计算机。然后,客户端需要连接到路由器公共IP上的端口,以便路由器可以将该流量转发到服务器。