【发布时间】:2011-12-24 12:15:09
【问题描述】:
这是一个简单的 TCP 服务器。程序终止时如何关闭套接字? 我已经使用 try/finally 并尝试关闭套接字。但是当我退出程序时它不会运行 finally 块。
任何人都可以知道如何以正确的方式关闭套接字?
try {
socket = new ServerSocket(port);
System.out.println("Server is starting on port " + port + " ...");
}catch (IOException e){
System.out.println("Error on socket creation!");
}
Socket connectionSocket = null;
try{
while(true){
try{
connectionSocket = socket.accept();
Thread t = new Thread(new ClientConnection(connectionSocket));
t.start();
}catch (IOException e) {
System.out.println("Error on accept socket!");
}
}
}finally{
this.socket.close();
System.out.println("The server is shut down!");
}
【问题讨论】:
-
在您的 finally 块中调用套接字
close()方法,或者现在使用 java 7 您可以使用 try-with-resources 块,它会为您关闭它们。 javacodegeeks.com/2011/07/… -
您还需要在调用
close()之前进行空检查,以防ServerSocket构造函数抛出异常。 -
@mre:只需按 Eclipse 中的终止按钮或控制台中的 control-c 即可。我想添加一个最后的消息说“服务器已关闭”,在 python 中,这很容易做到,但在 java 中不知道
-
我会在你的循环之外捕获 IOException。您不太可能从该错误中恢复,因此无限循环可能不是一个好主意。
-
@Peter Lawrey +1,或者在 catch 块中添加
break。