为什么在运行方法中关闭套接字?

丹尼斯·格林奇

服务器:

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public final class Server {

public static void main(String[] args) {
    new Server().start();
}

public void start() {

    ExecutorService executorService = Executors.newFixedThreadPool(10);
    try (ServerSocket serverSocket = new ServerSocket(1200)) {
        while (true) {
            try (Socket socket = serverSocket.accept()) {
                executorService.submit(new SocketHandler(socket));
            } catch (IOException e) {
                System.out.println("Error accepting connections");
            }
        }
    } catch (IOException e) {
        System.out.println("Error starting server");
    }
}

public final class SocketHandler implements Runnable {

    private final Socket socket;

    public SocketHandler(Socket connection) {
        this.socket = connection;
        System.out.println("Constructor: is socket closed? " + this.socket.isClosed());
    }

    @Override
    public void run() {
        System.out.println("Run method: is socket closed? " + this.socket.isClosed());
    }
}
}

客户:

import java.io.IOException;
import java.net.Socket;

public final class Client{

public static void main(String[] args) {

    try (Socket socket = new Socket("localhost", 1200)) {
    } catch (IOException e) {}
}

输出:

Constructor: is socket closed? false
Run method: is socket closed? true

从输出中可以看到,调用run方法时socket将关闭,但在构造函数中则将其打开。

问题:如何防止套接字在运行方法中关闭,以便我可以访问其输出流?

充满鳗鱼的气垫船

不要将带有套接字的资源与try一起使用,因为在这种情况下,一旦try块退出,资源(此处为套接字)将被关闭。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么在运行服务器套接字并使用shutdown()之后,该目录中是否有文件?

来自分类Dev

为什么线程中的python套接字无法始终正确关闭(即如果我连续多次运行该程序)

来自分类Dev

为什么套接字在运行时不是instanceof Closeable?

来自分类Dev

为什么套接字在运行时不是instanceof Closeable?

来自分类Dev

C中的套接字:关闭套接字的正确方法

来自分类Dev

在.NET Core 3.1中关闭C#套接字的正确方法是什么?

来自分类Dev

什么时候关闭Java中的套接字连接

来自分类Dev

在 PHP 中关闭套接字

来自分类Dev

在python中关闭TCP套接字的正确方法

来自分类Dev

为什么在原始套接字上关闭/关闭后,read()不返回?

来自分类Dev

为什么在原始套接字上关闭/关闭后,read()不返回?

来自分类Dev

为什么从套接字流中读取永远会阻塞?

来自分类Dev

linux套接字:在C中关闭套接字

来自分类Dev

为什么套接字关闭后端口没有立即释放?

来自分类Dev

为什么我的套接字没有在服务器端关闭?

来自分类Dev

Python套接字-为什么在发送多个消息后关闭连接?

来自分类Dev

正确关闭unix套接字的方法

来自分类Dev

如何关闭正在运行的套接字线程?

来自分类Dev

在子进程中关闭打开的套接字

来自分类Dev

R中的ZeroMQ,如何关闭套接字

来自分类Dev

从崩溃的程序中关闭打开的套接字

来自分类Dev

如何关闭python中的套接字连接?

来自分类Dev

确定正在运行的线程的套接字/处理器

来自分类Dev

使用Angular JS,在更改路线时关闭Web套接字连接的正确方法是什么?

来自分类Dev

Spring Integration TCP - 完全关闭监听套接字的好方法是什么

来自分类Dev

为什么套接字的行为如此?

来自分类Dev

为什么套接字实现比请求慢?

来自分类Dev

为什么套接字会发出多次?

来自分类Dev

为什么套接字的行为是这样的?

Related 相关文章

  1. 1

    为什么在运行服务器套接字并使用shutdown()之后,该目录中是否有文件?

  2. 2

    为什么线程中的python套接字无法始终正确关闭(即如果我连续多次运行该程序)

  3. 3

    为什么套接字在运行时不是instanceof Closeable?

  4. 4

    为什么套接字在运行时不是instanceof Closeable?

  5. 5

    C中的套接字:关闭套接字的正确方法

  6. 6

    在.NET Core 3.1中关闭C#套接字的正确方法是什么?

  7. 7

    什么时候关闭Java中的套接字连接

  8. 8

    在 PHP 中关闭套接字

  9. 9

    在python中关闭TCP套接字的正确方法

  10. 10

    为什么在原始套接字上关闭/关闭后,read()不返回?

  11. 11

    为什么在原始套接字上关闭/关闭后,read()不返回?

  12. 12

    为什么从套接字流中读取永远会阻塞?

  13. 13

    linux套接字:在C中关闭套接字

  14. 14

    为什么套接字关闭后端口没有立即释放?

  15. 15

    为什么我的套接字没有在服务器端关闭?

  16. 16

    Python套接字-为什么在发送多个消息后关闭连接?

  17. 17

    正确关闭unix套接字的方法

  18. 18

    如何关闭正在运行的套接字线程?

  19. 19

    在子进程中关闭打开的套接字

  20. 20

    R中的ZeroMQ,如何关闭套接字

  21. 21

    从崩溃的程序中关闭打开的套接字

  22. 22

    如何关闭python中的套接字连接?

  23. 23

    确定正在运行的线程的套接字/处理器

  24. 24

    使用Angular JS,在更改路线时关闭Web套接字连接的正确方法是什么?

  25. 25

    Spring Integration TCP - 完全关闭监听套接字的好方法是什么

  26. 26

    为什么套接字的行为如此?

  27. 27

    为什么套接字实现比请求慢?

  28. 28

    为什么套接字会发出多次?

  29. 29

    为什么套接字的行为是这样的?

热门标签

归档