5

私は、接続を確立してそれが機能するかどうかを確認するために、(単純な、初心者向けの)サーバークライアントをプログラムしようとしています。そして、そうです。私が自分の4つの壁/ネットワークの中にいる限り。ルーターのIPを経由しようとすると、クライアントは非常に細かいエラーメッセージを生成します。通常の疑わしいものはすべて排除されました。ルーターポート転送がオンで、ファイアウォールが干渉せず(オフにしても機能しません)、canyouseeme.orgは、選択したサーバーへの接続を確立できると言っています。サーバーの実行時のポート。

これがサーバーのソースコードです。少し電話をかけるだけでコマンドラインからアクセスできることがわかったからです。接続を確立しようとすると、Could not open connection to the host, on port 49163:Connection failed

サーバ:

import java.net.*;
import java.io.*;

public class ChatServer {
    public static void main(String[] args) throws IOException {

        ServerSocket server = null;

        try {
            System.setProperty("java.net.preferIPv4Stack" , "true");
            server = new ServerSocket(49163);
        } catch (IOException e) {
            System.err.println("Could not listen on port: 49163.");
            System.exit(1);
        }

        Socket client = null;
        try {
            client = server.accept();
        } catch (IOException e) {
            System.err.println("Accept failed.");
            System.exit(1);
        }

        PrintWriter out = new PrintWriter(client.getOutputStream(), true);
        BufferedReader in = new BufferedReader(newInputStreamReader(client.getInputStream()));
        String inputLine;
        String outputLine;

        out.println("Connection established");
        while ((inputLine = in.readLine()) != null) {
            if (inputLine.equals("exit")) {
                break;
            }
        outputLine = inputLine;
        out.println(outputLine);
        }
        out.close();
        in.close();
        client.close();
        server.close();
        System.out.println("Server offline");
    }
}

そうそう、preferIP4vStackはStackoverflowで拾ったものでしたが、うまくいかないようです。

なんらかの理由で、クライアントのコードを含めることができず、フォーマットに関するメッセージが表示され続け、理解できません。しかし、私が見ているように、コマンドライン経由で接続することさえできないので(「実際の」IPに接続しようとすると)、クライアントが関与する必要はありません。しかし、とにかくエラーを見たいあなたのために:

java.net.ConnectException: Connection refused: connect
  at java.net.PlainSocketImpl.socketConnect(Native Method)
  at java.net.PlainSocketImpl.doConnect(Unknown Source)
  at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
  at java.net.PlainSocketImpl.connect(Unknown Source)
  at java.net.SocksSocketImpl.connect(Unknown Source)
  at java.net.Socket.connect(Unknown Source)
  at java.net.Socket.connect(Unknown Source)
  at java.net.Socket.<init>(Unknown Source)
  at java.net.Socket.<init>(Unknown Source)
  at ChatClient.main(ChatClient.java:12)
4

2 に答える 2

0

ポート49163でホストへの接続を開くことができませんでした:接続に失敗しました

いいえ、そうではありませんでした。これはJavaメッセージではありません。あなたのコードは、あなたがそれ自身のはるかに詳細なメッセージを持っていたConnectExceptionを捕まえたとき、それを言いました。それを印刷すると、何が悪かったのかを見つけることができるかもしれません。独自のメッセージを作成し、例外が通知する内容を抑制することは、良い考えではありません。

メッセージはおそらく次のいずれかになります。

  • 「接続が拒否されました」。これは、ターゲットのホストまたはポートが間違っているか、ファイアウォールがあることを意味します
  • 「接続がタイムアウトしました」、これはネットワーク接続の問題です
  • 「ホストへのルートがありません」、これはIPルーティングの問題です
  • 「不明なホスト」。これも、サーバー名が間違っていることを意味します。
于 2013-02-05T23:46:37.690 に答える
0

今、笑うのか泣くのかわからない。友人から、ネットワークインターンのPCから外部IPでログインしようとしたことが問題かもしれないと言われましたが、なんらかの理由で出られない、または戻れないのです。どこかからログインしてみてください、そして出来上がり!チャームのように機能します。

于 2013-02-07T06:46:35.867 に答える