0

別のクラスからメソッドを呼び出そうとしています。つまり、シリアル化を使用したいのですが、メソッド名とそのパラメーターのオブジェクトを作成してソケットに書き込みますが、ObjectOutputStreamを作成したいときに、「接続がピアによってリセットされました」というエラーが発生します。 :ソケット書き込みエラー」考えられる理由を検索しましたが、適切な答えが見つかりませんでした

サーバー側では、ソケットを閉じなかったか、閉じるための作業を何もしなかったので、その後何が起こるかわかりません:-??

行で:

ObjectOutputStream oos = (new ObjectOutputStream(os));

私のコードは次のとおりです。

InvocationVO invo = new InvocationVO("showStart", treasure, round);

for (int i = 0; i < numPlayer; i++) {
    OutputStream os = socket.get(i).getOutputStream();
    ObjectOutputStream oos = (new ObjectOutputStream(os)); // this has error
    oos.writeObject(invo);

    oos.close();
    os.close();
    Client.getClients()[i].invoke();
}

よろしくお願いします!

4

1 に答える 1

5

ピアによって既に閉じられている接続に書き込もうとしています。それがあなたの検索に出てこなかったとは信じがたいです。この問題の原因は、まずoos、このコードで を閉じているため、ソケットを閉じているため、(a) 2 回目は実行されず、(b) ソケットを閉じるとピアが EOS 状態になり、 (c) このコードを 2 回目に実行すると、少なくとも 2 つの問題が発生します。

まだヒットしていない 3 番目の問題があります。ObjectOutputStreamこのコードを実行するたびに、ソケットの存続期間中に同じものを使用するのではなく、新しいものを作成しています。ObjectInputStreamどこで使っても同じです。ここで行っていることを行うと、 に遭遇する可能性がありますStreamCorruptedException: invalid type code

于 2012-06-29T06:27:18.713 に答える