套接字与流的正确关闭
Java网络编程中要创建套接字,获得套接字的输入流,获得套接字的输出流,操作完成以后不要忘了关闭套接字和输入输出流。根据流与套接字之间的依赖关系,关闭的原则当然是先关闭输入输出流,再关闭套接字。但是要注意关闭的时候是会有异常抛出的,所以是不能向下面这种关闭方式的:
private void closeSocket(Socket socket,OutputStream os,InputStream is){
if(is != null){
try {
is.close();
os.close();
socket.close();
} catch (IOException e) {
// TODO 自动生成 catch 块
System.out.println("关闭失败");;
}
}
上面的关闭方式存在的问题是一旦在关闭输入流或输出流出现了异常,程序就会转到Catch块,然后结束,而套接字还没有关闭。正确的方式应该这样:
private void closeSocket(Socket socket,OutputStream os,InputStream is){
if(is != null){
try {
is.close();
} catch (IOException e) {
// TODO 自动生成 catch 块
System.out.println("关闭输入流失败");;
}
}
if(os != null){
try {
os.close();
} catch (IOException e) {
// TODO 自动生成 catch 块
System.out.println("关闭输出流失败");
}
}
if(socket != null){
try {
socket.close();
} catch (IOException e) {
// TODO 自动生成 catch 块
System.out.println("Socket关闭失败");
}
}
}
注意每一个IF都是平行的,前面的出现问题不会影响到下面的。