サーバー スニペット:
reader = new BufferedReader(new InputStreamReader(new BufferedInputStream(connection.getInputStream())));
if (reader.ready()) {
result = reader.readLine();
if (result == null) {
quit(); // handle closing the socket
} else {
// process result
}
}
クライアント スニペット:
BufferedOutputStream os = new BufferedOutputStream(connection.getOutputStream());
OutputStreamWriter osw = new OutputStreamWriter(os, "US-ASCII");
osw.write("hello\n");
osw.flush();
問題:
クライアントがサーバーに何かを書き込むと、それは正しく読み取られますが、クライアントがソケットを閉じると (たとえば、プログラムを強制終了する)、null の結果が に到達しないため、はreader.readLine()
を出力する必要があります。を放置すると、サーバーはデータを読み取ることができません。null
if (reader.ready()) {
quit()
if (reader.ready()) {
これを修正するにはどうすればよいですか?
編集:次のwhile ((result = reader.readLine()) != null) {
ように、その後さらにコードを実行する必要があるため、使用できません:
while (running) {
try {
reader = new BufferedReader(new InputStreamReader(new BufferedInputStream(connection.getInputStream())));
if (reader.ready()) {
result = reader.readLine();
if (result == null) quit();
else // process result
}
catch (Exception e) { ... }
// more code
}
}