为什么最后在客户端服务器程序中阻止异常不工作



我已经运行了客户端-服务器交互的代码。忽略线程的部分,我知道这不起作用。

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.*;
public class Client {
public static void main(final String[] args) throws Exception {
Socket socket = null;
while (true) {
try {
socket = new Socket("localhost", 3456);
System.out.println("Connect Ho gaya");
final BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
final PrintWriter pw = new PrintWriter(socket.getOutputStream(), true);
final BufferedReader sr_receive = new BufferedReader(new InputStreamReader(socket.getInputStream()));
Thread sendMes = new Thread(new Runnable() {
public void run() {
while (true) {
try {
String send = br.readLine();
pw.println(send);
} catch (Exception e) {
System.out.println("Send Message Problem");
}
}
}
});
Thread recMes = new Thread(new Runnable() {
public void run() {
while (true) {
try {
String recieve;
if ((recieve = sr_receive.readLine()) != null);
System.out.println("Server:" + recieve);
} catch (Exception e) {
System.out.println(e);
}
}
}
});
while (true) {
recMes.run();
sendMes.run();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
socket.close();
}
}
}
}

当我运行这个客户端程序(没有运行服务器程序(时,我希望它一直显示异常,直到我运行服务器端程序,因为它使它成为一个无限循环。

但在运行它时,最初它显示出退出程序的异常。而且,当我删除finally部分时,它会不断显示异常和一个无限循环。

您的finally块正在引发异常。当这种情况发生时,执行退出try-catch finally块和它所在的循环

该异常可能是由socket为null引起的。如果在Socket(host,port)构造函数中打开连接失败,并且在没有向socket分配任何内容的情况下抛出异常,则会发生这种情况。在finally块中添加一个if语句来检查这一点会有所帮助。

socket.close也有可能抛出IOException。为此,您需要添加另一个尝试捕获。

} finally {
if (socket != null) {
try {
socket.close();
} catch (IOException ioe) {
e.printStackTrace();
}
}
}

最新更新