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 に答える