java - 在这个Java套接字代码中,这个无限循环是否会因套接字关闭而终止?

标签 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)

最佳答案

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

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

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

关于java - 在这个Java套接字代码中,这个无限循环是否会因套接字关闭而终止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15397634/

相关文章:

python - ThreadingTCPServer 与 ThreadingMixIn HTTPServer

无法关闭套接字选项 IPV6_V6ONLY

c - 如何修改服务器/客户端以将端口号和/或主机作为可选的命令行参数?

c - 在recvfrom 和socket 之后使用connect

java - 原始实时数据包中的 NSL KDD 功能?

java - 我如何使用带有 byte[] 键的 Guava 缓存?

java - 64 位 JVM 上对象引用的内存要求

java - ServerSocket代码适用于PC,不适用于Android

java - Java 中的多客户端聊天应用程序

java - 更改java中类的数组的值