为什么第二次服务端不用shutOutputStream,客户端不用shutInputStream?
服务器接收客户端信息的时候,老师读取完,就shutInputStream(),但是第二次服务器向客户端发送信息时却不用shutOutputStream(),客户端也是,我自己加下去试了下,却报错为什么?求大神解答下,感激不尽
服务器接收客户端信息的时候,老师读取完,就shutInputStream(),但是第二次服务器向客户端发送信息时却不用shutOutputStream(),客户端也是,我自己加下去试了下,却报错为什么?求大神解答下,感激不尽
2016-04-03
这么说吧,客户端发送信息给服务端,服务端接受,客户端,服务器端老师完全可以不关闭输入输出流,直接关闭socke和相关资源,信息依然可以正常传r送。这是因为关闭了客户端和服务器端socket,程序在终结socket之前,会将相应的信息发送完成,信息处理完成,然后关闭。如果,你加上服务器给客户端发送信息,然后客户端接收,你就必须知道。客户端之前是由一个输出流在发送数据,如果它不关闭,就意味着数据仍然没有发送完,这时候,服务器端接收到的输入流就没有结束信号,程序就会一直卡在那里。只有关闭了,才能给服务器端一个信号,告诉他我把信息发完了。至于老师为什么第二次服务器发送客户端信息的时候没加shutdown,实际上是可以加上的,没任何问题,我不知道你的为啥出问题了,当然最后不加也是可以的,因为最终他的关闭socket也会让客户端接收到终止信号。
这是关闭输出流的源码,其实他就干了两件事;shutout=true,getImpl().shutdownput();
举报