gpt4 book ai didi

java - 关闭套接字和 ObjectOutputStream 的正确方法?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:44:27 27 4
gpt4 key购买 nike

我正在用 Java 编写一个网络应用程序,以便在客户端和服务器之间进行通信,我使用序列化对象来表示数据/命令并通过对象输出/输入流发送它们。

我在完全关闭连接时遇到问题,我认为我遗漏了一些我并不真正了解的基本知识,我以前从未使用过带有序列化的套接字。

无论我尝试关闭连接的顺序是什么(先关闭客户端,先关闭服务器),都会抛出 ConnectionReset 异常。我无法捕获此异常,因为客户端在另一个线程中运行,程序的其余部分不断地监听消息,这是必须完成的,因为在 Java socket.read() 中是一种阻塞方法。

关闭我用来发送对象的套接字的正确方法是什么?

最佳答案

您需要向您的监听器(无论是客户端还是服务器)发送某种信号以停止监听更多数据。这是一个非常简单的例子:

ObjectInputStream ois = new ObjectInputStream(new BufferedInputStream(sock.getInputStream()));

while (true) {
Object obj = ois.readObject();

if (obj instanceof String) {
if ((String)obj).equalsIgnoreCase("quit")) {
break;
}
}

// handle object
}

ois.close();
sock.close();

关于java - 关闭套接字和 ObjectOutputStream 的正确方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/654117/

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