關(guān)于java網(wǎng)絡(luò)編程client端提示SocketException
問題描述
問題解答
回答1:請指正:問題可能的關(guān)鍵點:一個客戶端,只做一次 accept(),不關(guān)閉輸出流
1.客戶端保持了一個 clientSocket 實例(只調(diào)用了一次connect),服務(wù)器保持了一個 ServerSocket 實例。只保持一個客戶端socket并且希望有第二次輸入處理,這似乎是準備用長連接。
當關(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)里面每次都進行了關(guān)閉。
相關(guān)文章:
1. 在應(yīng)用配置文件 app.php 中找不到’route_check_cache’配置項2. html按鍵開關(guān)如何提交我想需要的值到數(shù)據(jù)庫3. HTML 5輸入框只能輸入漢字、字母、數(shù)字、標點符號?正則如何寫?4. javascript - 請教如何獲取百度貼吧新增的兩個加密參數(shù)5. gvim - 誰有vim里CSS的Indent文件, 能縮進@media里面的6. 跟著課件一模一樣的操作使用tp6,出現(xiàn)了錯誤7. PHP類屬性聲明?8. javascript - 求助canvas繪制馬賽克的問題,老是取色不準9. java - 安卓接入微信登錄,onCreate不會執(zhí)行10. python沒入門,請教一個問題
