R30*_*30B 0 java exception finally
我已经运行了客户端-服务器交互的代码。忽略线程部分,我知道那行不通。
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();
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
当我运行这个客户端程序(没有运行服务器程序)时,我希望它一直显示异常,直到我运行服务器端程序,因为它使它成为一个无限循环。
但是在运行它时,最初它显示退出程序的异常。而且当我删除 finally 部分时,它一直显示异常和无限循环。
您的finally块正在引发异常。发生这种情况时,执行会退出 try-catch-finally-block 及其所在的循环。
异常可能是由socketnull引起的。如果在Socket(host,port)构造函数中打开连接失败,就会发生这种情况,并且在没有分配任何内容的情况下抛出异常socket。在finally块中添加一个 if 语句来检查这个会有所帮助。
也有可能socket.close抛出 IOException。您需要为此添加另一个 try-catch。
} finally {
if (socket != null) {
try {
socket.close();
} catch (IOException ioe) {
e.printStackTrace();
}
}
}
Run Code Online (Sandbox Code Playgroud)