為什么第二次服務端不用shutOutputStream,客戶端不用shutInputStream?
服務器接收客戶端信息的時候,老師讀取完,就shutInputStream(),但是第二次服務器向客戶端發(fā)送信息時卻不用shutOutputStream(),客戶端也是,我自己加下去試了下,卻報錯為什么?求大神解答下,感激不盡
服務器接收客戶端信息的時候,老師讀取完,就shutInputStream(),但是第二次服務器向客戶端發(fā)送信息時卻不用shutOutputStream(),客戶端也是,我自己加下去試了下,卻報錯為什么?求大神解答下,感激不盡
2016-04-03
舉報
2016-05-20
這么說吧,客戶端發(fā)送信息給服務端,服務端接受,客戶端,服務器端老師完全可以不關閉輸入輸出流,直接關閉socke和相關資源,信息依然可以正常傳r送。這是因為關閉了客戶端和服務器端socket,程序在終結socket之前,會將相應的信息發(fā)送完成,信息處理完成,然后關閉。如果,你加上服務器給客戶端發(fā)送信息,然后客戶端接收,你就必須知道??蛻舳酥笆怯梢粋€輸出流在發(fā)送數(shù)據(jù),如果它不關閉,就意味著數(shù)據(jù)仍然沒有發(fā)送完,這時候,服務器端接收到的輸入流就沒有結束信號,程序就會一直卡在那里。只有關閉了,才能給服務器端一個信號,告訴他我把信息發(fā)完了。至于老師為什么第二次服務器發(fā)送客戶端信息的時候沒加shutdown,實際上是可以加上的,沒任何問題,我不知道你的為啥出問題了,當然最后不加也是可以的,因為最終他的關閉socket也會讓客戶端接收到終止信號。
這是關閉輸出流的源碼,其實他就干了兩件事;shutout=true,getImpl().shutdownput();
2016-04-09
我說一下個人理解,如果有錯還望指出
close關閉的是整個socket,shutdown關閉的輸入或者輸出流
當需要切換的時候,我可以shutdown掉一個流,這時候整個socket并不會關閉
所以,最后只要close了,關不關閉并不影響;因為需要切換輸入輸出,所以才shutdown了
像一開始沒有服務器端再回復客戶端的時候,我們不去shutdown直接close也是可以的
2016-04-09
同問!
2016-04-04
同問!