我正在研究以下基本 Java 套接字代码(source)。这是一个 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);
}
而在服务器上,我们有相应的代码,来获取笑话的妙语。
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 的多播网络库——那会是更好的方法吗?我正在寻找任何提示。
到目前为止我的服务器代码(对不起,它很乱)
&
谢谢