gpt4 book ai didi

java - 客户端断开连接后,Socket isClosed() 返回 false

转载 作者:搜寻专家 更新时间:2023-10-31 19:32:44 43 4
gpt4 key购买 nike

<分区>

在我的 java 应用程序中,我有一个 TCP 服务器,它将我的应用程序中生成的数据发送到所有连接的客户端。对于每个新套接字,我创建一个新线程。以下是线程代码。

    public void run() {
try {
PrintStream printStream = new PrintStream(socket.getOutputStream(), true);
while (true) {
if (socket.isClosed()) {
break;
}
synchronized (DataSource.getInstance()) {
printStream.println(DataSource.getInstance().getData());
try {
DataSource.getInstance().wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
}

当新数据可用时,数据生成线程写入 DataSoure 并调用 notifyAll(),以便所有处理已连接套接字的线程唤醒并向客户端发送可用数据。

我的问题是,即使客户端断开连接,socket.isClosed() 也会返回 true。因此处理套接字的线程永远不会终止。

为什么会这样?如何在客户端断开连接时退出线程?

43 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com