对不起,问题,但我在Java中完全是noob.什么是执行最佳实践ServerSocket.close()
抓时IOException
从ServerSocket
?根据文档,ServerSocket.close()
throws IOException
和编译器要求我们抓住它.什么是关闭连接的正确方法IOException
?
try {
server = new ServerSocket(this.getServerPort());
while(true) {
socket = server.accept();
new Handler( socket );
}
} catch (IOException e) {
if (server != null && !server.isClosed()) {
server.close(); //compiler do not allow me to do because I should catch IOExceoption from this method also...
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢!
如果你打算在try {} catch {}之外关闭ServerSocket,你也可以将它放在finally {}中.
try {
server = new ServerSocket(this.getServerPort());
while(true) {
socket = server.accept();
new Handler( socket );
}
} catch (IOException e) {
// Do whatever you need to do here, like maybe deal with "socket"?
}
finally {
try {
server.close();
} catch(Exception e) {
// If you really want to know why you can't close the ServerSocket, like whether it's null or not
}
}
Run Code Online (Sandbox Code Playgroud)
这在Java中很难看.我讨厌它,但这是你应该这样做的方式:将它包装成另一个try-catch:
try {
server = new ServerSocket(this.getServerPort());
while(true) {
socket = server.accept();
new Handler( socket );
}
} catch (IOException e) {
if (server != null && !server.isClosed()) {
try {
server.close();
} catch (IOException e)
{
e.printStackTrace(System.err);
}
}
}
Run Code Online (Sandbox Code Playgroud)
在Java SE 7或更高版本可以使用的try-与资源声明,ServerSocket implements java.io.Closeable
,这样你就不会需要明确#close()
以这种方式使用时插座。
try (ServerSocket server = new ServerSocket(this.getServerPort())) {
while(true) {
socket = server.accept();
new Handler( socket );
}
} catch (IOException e) {
// It's already closed, just print the exception
System.out.println(e);
}
Run Code Online (Sandbox Code Playgroud)