次の基本的な Java ソケット コード ( source ) を勉強しています。これは、ノック ノック ジョーク クライアント/サーバー アプリです。
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);
}
サーバーには、ジョークのオチを取得するための対応するコードがあります。
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というライブラリがあることを知りました。何かヒントを探しています。
これまでの私のサーバーコード(乱雑で申し訳ありません)
&
ありがとう