状況は次のとおりです。ServerSocket ss があり、「ソケット ソケット = ss.accept();」の場合、次のようにします。
istream = socket.getInputStream();
ostream = socket.getOutputStream();
in = new BufferedReader(new InputStreamReader(istream));
out = new PrintWriter(new BufferedOutputStream(ostream));
/*
I use in/out few times
everything OK
*/
ObjectOutputStream oos = new ObjectOutputStream(ostream);
oos.writeObject(someobject);
/* probably code that solves the problem */
String line = in.readLine();
クライアント側には、次のコードがあります。
PrintWriter out = new PrintWriter(new BufferedOutputStream(socket.getOutputStream()),true);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
/*
using in/out, no problems
*/
ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
SomeObject so = (SomeObject)ois.readObject();
out.println("some text");
何かオブジェクトを送るまでは、すべて問題ありません。クライアントはオブジェクトを適切に受け取ります。問題はありません。しかし、私はもうソケットを使用することはできません。oos.close() を実行すると、「ソケットが閉じられました」という例外が発生します。oos.reset() を実行すると、同様のメッセージで例外が発生します。「ソケットリセット」。それで、私は何をすべきですか?writeObject() の後で同じ入力ストリームと出力ストリームを使用することは可能ですか?
「何らかのテキスト」を送信すると何が起こるかというと、readLine() を何度呼び出しても null が返されるだけで、その「何らかのテキスト」を取得することはありません。