我正在用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();