你说的是毕老师视频里用shutdownOutput()方法停止服务器端循环读取的情况吧?
我们定义循环停止的条件是接收到结束标记(-1),一般客户端发送完信息,直接关闭(客户端调用close()方法)会自动给服务器发送一个结束标记,服务器端的读取循环就结束,继续向下运行。
需要主动发送结束标记的例子里,客户端发送数据结束没有直接关闭,而是先等待读取服务器端的返回信息(read()方法)。这时客户端没发送结束信息,服务器端还处于循环中,也没办法给客户端返回信息。这样两边都在等待,程序就不能动了。
这时候就要在客户端发送完数据之后,在读到read方法进入等待之前,调用shutdownOutput()关闭客户端的输出流,发送一个结束标记给服务端让它结束循环。 |