0

我开发了一个聊天应用程序 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:我放了一个简单的代码(回显服务器)来代表我的真实服务器,这样你就可以快速理解我的代码:)。

致以我的问候 。

4

2 回答 2

2

这只是一个猜测,您是否进入路由器的配置实用程序并将其设置为代理(通常称为端口转发)对客户端的 telnet 请求?您的路由器可能正在监听 23,但除非您在路由器的固件上运行聊天客户端,否则我怀疑它知道如何处理该流量。也许我误解了你的问题。

于 2012-05-01T22:41:41.093 回答
1

仅仅让服务器在路由器后面运行不足以让外部客户端建立连接。无论服务器正在侦听哪个端口,路由器都需要在其上配置一个端口转发规则,该规则将该端口的入站流量转发到服务器正在运行的机器上。然后,客户端需要连接到路由器公共 IP 上的端口,以便路由器可以将该流量转发到服务器。

于 2012-05-01T22:47:14.877 回答