6

私は今本当にばかげていると感じています...基本的に私はローカルマシンでTCPを介して接続しています...そしてクライアントでイン/アウトストリームを作成しようとすると、オブジェクト入力ストリームの作成に合格しません。何が得られますか?これは2を印刷した後に停止します...例外などはありません...このクラスを使用したのはこれが初めてではないため、部分的に困惑しています。

try {
            System.out.println("1");
            mySocket = new Socket("localhost", 11311);
            System.out.println("12");
            oos = new ObjectOutputStream(mySocket.getOutputStream());
            System.out.println("2");
            ois = new ObjectInputStream(mySocket.getInputStream());
            System.out.println("13");

        } catch (Exception e) {
            e.printStackTrace();
        }
4

2 に答える 2

6

ObjectInputStreamの仕様から:

このコンストラクターは、対応するObjectOutputStreamがヘッダーを書き込んでフラッシュするまで、ブロックします。

于 2011-10-01T19:30:25.520 に答える
1

(将来の読者のために:)私はサーバープログラムにばかげた変更を加え、それを長い間テストしなかったので同じ問題を抱えていました、そして私はなぜプログラムがロックされているのか混乱しました。

ServerSocket接続を受け入れ(responderSocket = serverSock.accept();)、その後突然不適切ifな(私が言及したばかげた変更!)プログラムがスレッドから飛び出し、finallyストリームとソケットを閉じるためのブロックを追加しなかったため、ソケットは何も送信または受信せずに放棄されたままになりました(ストリームヘッダーも)。したがって、クライアント側のプログラムにはストリームヘッダーがありませんでした(ロックの前に実行された最後の関数が次のようになっていることを確認したコードをデバッグしたとき

public ObjectInputStream(InputStream in) throws IOException {
    verifySubclass();
    bin = new BlockDataInputStream(in);
    handles = new HandleTable(10);
    vlist = new ValidationList();
    enableOverride = false;
    readStreamHeader();                  //// <== This function
    bin.setBlockDataMode(true);
}

readStreamHeader();)。

したがって、サーバー側で何が起こるかに注意してください。問題は、期待した場所にない可能性があります。

于 2013-07-06T18:34:08.883 に答える