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