Java 客户端断开连接后是否可以重新使用InputStream?

Java 客户端断开连接后是否可以重新使用InputStream?,java,sockets,tcp,stream,Java,Sockets,Tcp,Stream,我的服务器在端口上打开一个serversocket,然后等待客户端以无限循环进行连接。第一个连接的客户端发送一些整数和映射,然后断开连接,但是,服务器仍应等待其他客户端。我的问题是,在正确地从第一个客户机接收到这些之后,我无法在同一个套接字的inputstream/outputstream上打开更多的扫描仪和PrintWriter。客户端可以连接,但无法发送或接收任何数据,我只是不明白是什么阻止了流: ServerSocket serv = new ServerSocket(port); wh

我的服务器在端口上打开一个serversocket,然后等待客户端以无限循环进行连接。第一个连接的客户端发送一些整数和映射,然后断开连接,但是,服务器仍应等待其他客户端。我的问题是,在正确地从第一个客户机接收到这些之后,我无法在同一个套接字的inputstream/outputstream上打开更多的扫描仪和PrintWriter。客户端可以连接,但无法发送或接收任何数据,我只是不明白是什么阻止了流:

ServerSocket serv = new ServerSocket(port);

while(true) {
    Socket sock = serv.accept();
    ObjectInputStream instream = new ObjectInputStream(sock.getInputStream());
    // receiving and handling the data here
    Scanner scan = new Scanner(sock.getInputStream());
    // trying to receive lines here from scanner but it's blocked
}
在我前面提到的客户机代码中,在发送映射和其他对象之后,我刷新ObjectOutputStream

此外,我以前在关闭系统上的扫描仪时也遇到过类似的问题。在我的代码前面,我无法在系统上使用任何扫描仪。在这之后,但在这个服务器代码中,我在接收到对象后不会关闭任何东西,所以我不明白为什么它会被阻止


那么,是否可以像这样重复使用InputStream,或者我是否应该为其他传入的客户端打开另一个套接字?如果不可能,我应该更改什么?

为每个客户端使用一个新的流。@HoverCraftFullOfels这不是代码显示的吗?@IwishIcouldthinkofagood:确实是,但看看他在问什么。为每个客户端使用一个新线程。从输入流读取EOS后,必须关闭它并停止读取。不要在accept循环或线程或可运行对象的构造函数中执行任何I/O操作:在其run方法中执行所有操作,这包括构造对象流。这里没有InputStream重用,只是重用变量。每次调用accept时,每个客户机都会得到一个新的套接字。真的不清楚你到底在问什么。