在这个Java套接字代码中,套接字关闭会终止这个无限循环吗?

时间:2013-03-13 22:21:47

标签: java sockets serversocket

这是一个基本的Java服务器(source),但我不太明白,因为我对while(true)部分感到好奇,它什么时候终止?

public static void main(String[] args) throws IOException {
    ServerSocket listener = new ServerSocket(9090);
    try {
        while (true) {
            Socket socket = listener.accept();
            try {
                PrintWriter out =
                    new PrintWriter(socket.getOutputStream(), true);
                out.println(new Date().toString());
            } finally {
                socket.close();
            }
        }
    }
    finally {
        listener.close();
    }
}

我们将如何到达最后一部分,即

finally {
        listener.close();

或者只是标准网络代码,才能拥有while(true)

1 个答案:

答案 0 :(得分:2)

如果抛出异常,循环将被打破。

Java中与IO相关的代码,当它失败时,几乎总会抛出异常,表明它失败的原因。您可以在http://docs.oracle.com/javase/6/docs/api/java/io/package-summary.html中查找被调用的方法,并查看它可以抛出的异常,例如。

while(true)是守护进程,服务器等主要循环的常用习惯用法,您希望它们永远不会停止运行,或者以抛出异常的形式停止。