【发布时间】:2013-12-23 22:38:57
【问题描述】:
我有一个套接字和四个由它创建的流:
InputStreamOutputStreamObjectInputStreamObjectOutputStream
我需要做什么才能关闭所有流以及套接字?我认为关闭套接字就足够了,但我得到了EOFExceptions...
代码越少越好。
关于问题的更多信息:
我打开一个连接并发送 UTF String trought 对象流。它的内容在服务器上启动不同的协议。执行协议时,服务器等待新的 UTF 字符串。
在某一时刻,客户端执行:
objectOutputStream.writeUTF("terminate");
objectOutputStream.flush(); //Is this even necessary?
socket.close();
在服务器端,会发生这样的事情:
String command = objectInputStream.readUTF();
if (command.equals("terminate")
{
socket.close();
}
//socket is not accessed after this point, until a new conenction is established
//(when socket and everything is reinitialized)
【问题讨论】:
-
除了异常之外,你在关闭套接字后有什么期望?
-
当您关闭套接字时,您也在关闭这些套接字的流/来自这些套接字的流。如果您尝试对关闭的流(关闭的套接字)进行操作,您应该得到一个异常和/或 EOF。
-
如果你用
BufferedOutputStream包裹它,你可以跳过.flush()。由于您使用Decorator模式作为流,您可以关闭最外层。
标签: java sockets inputstream outputstream