クライアントからの TCP ソケット接続を受け入れるこの単純なサーバーがあります。TCPConnectionHandler接続を試みる各クライアントは、新しい Socket を使用して独自のインスタンスを取得します。クライアントの切断をどのように処理すればよいかわかりません。これが私のものTCPConnectionHandlerです:
@Override
public void run() {
try {
br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
String line;
while (!(line = br.readLine()).isEmpty()) {
Message messageObj = Tools.JSON2Message(line);
messageObj.setSourceIP(socket.getInetAddress().toString().substring(1));
logger.info("TCPCH: Message received from: " + messageObj.getSourceIP() + ". Type of message: " + messageObj.getClass().getSimpleName());
Message response;
if (messageObj instanceof HandshakeReq) {
response = new HandshakeHandler(requestRouter.getTabletCollection()).handleRequest((HandshakeReq) messageObj, this);
} else {
response = requestRouter.routeAndHandleRequest(messageObj);
}
if (response != null)
sendMessageTCP(response);
}
} catch (IOException e) {
logger.error("TCPConnectionHandler failed: " + e.getCause());
e.printStackTrace();
}
}
これで、クライアントが切断されると、NullPointerExceptionそのトレースがメソッドにまでさかのぼりrun()ます。最初は、クライアントが切断されたときに取得されるオブジェクトInputStreamから取得されると考えていました。ただし、この例外をキャッチできませんでした。クライアントが切断されたときに実際に何が起こり、上記のスニペットに関連してそれを正しくキャッチするにはどうすればよいですか? SocketnullNullPointerExceptionBufferedReaderreadLine()