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