lucitas
2016-04-03 16:09
服务器接收客户端信息的时候,老师读取完,就shutInputStream(),但是第二次服务器向客户端发送信息时却不用shutOutputStream(),客户端也是,我自己加下去试了下,却报错为什么?求大神解答下,感激不尽
这么说吧,客户端发送信息给服务端,服务端接受,客户端,服务器端老师完全可以不关闭输入输出流,直接关闭socke和相关资源,信息依然可以正常传r送。这是因为关闭了客户端和服务器端socket,程序在终结socket之前,会将相应的信息发送完成,信息处理完成,然后关闭。如果,你加上服务器给客户端发送信息,然后客户端接收,你就必须知道。客户端之前是由一个输出流在发送数据,如果它不关闭,就意味着数据仍然没有发送完,这时候,服务器端接收到的输入流就没有结束信号,程序就会一直卡在那里。只有关闭了,才能给服务器端一个信号,告诉他我把信息发完了。至于老师为什么第二次服务器发送客户端信息的时候没加shutdown,实际上是可以加上的,没任何问题,我不知道你的为啥出问题了,当然最后不加也是可以的,因为最终他的关闭socket也会让客户端接收到终止信号。
这是关闭输出流的源码,其实他就干了两件事;shutout=true,getImpl().shutdownput();
我说一下个人理解,如果有错还望指出
close关闭的是整个socket,shutdown关闭的输入或者输出流
当需要切换的时候,我可以shutdown掉一个流,这时候整个socket并不会关闭
所以,最后只要close了,关不关闭并不影响;因为需要切换输入输出,所以才shutdown了
像一开始没有服务器端再回复客户端的时候,我们不去shutdown直接close也是可以的
同问!
同问!
Java Socket应用---通信是这样练成的
125013 学习 · 590 问题
相似问题