關(guān)于java網(wǎng)絡(luò)編程client端提示SocketException
問題描述
問題解答
回答1:請指正:問題可能的關(guān)鍵點:一個客戶端,只做一次 accept(),不關(guān)閉輸出流
1.客戶端保持了一個 clientSocket 實例(只調(diào)用了一次connect),服務(wù)器保持了一個 ServerSocket 實例。只保持一個客戶端socket并且希望有第二次輸入處理,這似乎是準(zhǔn)備用長連接。
當(dāng)關(guān)閉輸出流時,該輸出流對應(yīng)的socket也將隨之關(guān)閉 —— 《瘋狂java講義(第三版)》 p786
2.再往下看服務(wù)端。ss.accept() 放在了循環(huán)里,這是要處理多個客戶連接;順便對每個客戶端有一次讀取操作,然后這里并沒有后續(xù)多次的讀取操作,這可能是問題所在。
短連接 or 長連接?對于希望連續(xù)的多次通訊,可以使用一個連接,多次讀寫(長連接),也可以多次連接,每個連接一次讀寫(短連接)你的客戶端想搞長連接,服務(wù)器似乎想搞短連接。建議:
長連接:客戶端不變,服務(wù)器對這一個客戶端,只做一次 accept(),循環(huán)處理多次輸入通訊,監(jiān)聽流,但不關(guān)閉socket。
短連接:客戶端每次發(fā)起新 socket 連接(建立新socket實例),每次操作完成,關(guān)閉流,關(guān)閉socket。服務(wù)器循環(huán)體不變,在循環(huán)體里關(guān)閉流,關(guān)閉每次accept()返回的socket。
因為不清楚您的業(yè)務(wù),所以不知道代碼的真實意圖。另外還值得拓展的關(guān)注點是:
多客戶端連接,多次連接,會話管理,并發(fā)等等。
回答2:可以好好看看你的代碼,你在while循環(huán)里面每次都進(jìn)行了關(guān)閉。
相關(guān)文章:
1. javascript - 請問 chrome 為什么會重復(fù)加載圖片資源?2. (python)關(guān)于如何做到按win+R再輸入文件文件名就可以運行?3. mysql - 分庫分表、分區(qū)、讀寫分離 這些都是用在什么場景下 ,會帶來哪些效率或者其他方面的好處4. python - 能通過CAN控制一部普通的家用轎車嗎?5. javascript - react input file6. javascript - 請教如何獲取百度貼吧新增的兩個加密參數(shù)7. css3 - 微信前端頁面遇到的transition過渡動畫的bug8. Python爬蟲如何爬取span和span中間的內(nèi)容并分別存入字典里?9. html5 - 只用CSS如何實現(xiàn)input框的寬度隨框里輸入的內(nèi)容長短自動適應(yīng)?10. javascript - 關(guān)于css絕對定位在ios瀏覽器被橡皮筋遮擋的問題
