Я изучаю следующий базовый код Java-сокета (источник). Это приложение клиент/сервер Knock-Knock-Joke.
В Client мы установили сокет как обычно:
try {
kkSocket = new Socket("localhost", 4444);
out = new PrintWriter(kkSocket.getOutputStream(), true);
in = new BufferedReader(new InputStreamReader(kkSocket.getInputStream()));
} catch( UnknownHostException uhe ){ /*...more error catching */
А потом мы просто читаем и пишем на сервер:
BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
String fromServer;
String fromUser;
while ((fromServer = in.readLine()) != null) {
System.out.println("Server: " + fromServer);
if (fromServer.equals("bye."))
break;
fromUser = stdIn.readLine();
if (fromUser != null){
System.out.println("Client: " + fromUser);
out.println(fromUser);
}
И на server, у нас есть соответствующий код, чтобы получить шуточную строку.
KnockKnockProtocol kkp = new KnockKnockProtocol();
outputLine = kkp.processInput(null);
out.println(outputLine);
while ((inputLine = in.readLine()) != null) {
outputLine = kkp.processInput(inputLine);
out.println(outputLine);
if (outputLine.equals("Bye."))
break;
Я хочу приложить сердцебиение ко всему тому, что выйдет на консоль, когда он обнаружит, что другая сторона умерла. Потому что то, что происходит сейчас, если я убиваю другую сторону, является исключением - как показано ниже:
Итак, если я запускаю как KnockKnockClient, так и KnockKnockServer, то я закрываю KnockKnockServer, что должно произойти, так это то, что на клиенте я вижу это:
>The system has detected that KnockKnockServer was aborted
Я ищу любые советы. До сих пор я в основном пытался запустить поток демона, который периодически создает новые подключения к другой стороне. Но я смущен о том, какое условие проверить (но я думаю, что это просто значение boolean
?). Это правильный подход? Я только что узнал, что в сети есть библиотека под названием JGroups для многоадресной сети - это было бы лучше? Я ищу любые советы.
Мой серверный код до сих пор (извините, что это грязно)
&
спасибо