關(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. 360瀏覽器與IE瀏覽器有何區(qū)別???2. mysql 怎么做到update只更新一行數(shù)據(jù)?3. javascript - 新浪微博網(wǎng)頁版的字?jǐn)?shù)限制是怎么做的4. node.js - mysql如何通過knex查詢今天和七天內(nèi)的匯總數(shù)據(jù)5. mysql 插入數(shù)值到特定的列一直失敗6. python - 在使用Pycharm時經(jīng)常看到如下的樣式,小括號里紅色的部分是什么意思呢?7. javascript - 用jsonp抓取qq音樂總是說回調(diào)函數(shù)沒有定義8. 怎么在網(wǎng)頁中設(shè)置圖片進(jìn)行左右滑動9. sublime可以用其他編譯器替換嗎?10. python 合并dict
