我正在用 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/