首頁  >  問答  >  主體

关于java网络编程client端提示SocketException

大家讲道理大家讲道理2744 天前585

全部回覆(2)我來回復

  • PHP中文网

    PHP中文网2017-04-18 10:49:10

    請指正:
    問題可能的關鍵點:一個客戶端,只做一次 accept(),不關閉輸出流

    1.客戶端保持了一個 clientSocket 實例(只呼叫了一次connect),伺服器保持了一個 ServerSocket 實例。只保持一個客戶端socket並且希望有第二次輸入處理,這似乎是準備用長連接。

    當關閉輸出流時,此輸出流對應的socket也將隨之關閉 —— 《瘋狂java講義(第三版)》 p786

    2.再往下看服務端。 ss.accept() 放在了循環裡,這是要處理多個客戶連接;順便對每個客戶端有一次讀取操作,然後這裡並沒有後續多次的讀取操作,這可能是問題所在。

    短連接 or 長連接? 對於希望連續的多次通訊,可以使用一個連接,多次讀寫(長連接),也可以多次連接,每個連接一次讀寫(短連接)
    你的客戶端想搞長連接,伺服器似乎想搞短連接。建議:

    長連線:客戶端不變,伺服器對這一個客戶端,只做一次 accept(),循環處理多次輸入通訊,監聽流,但不關閉socket

    短連線:客戶端每次啟動新 socket 連線(建立新socket實例),每次操作完成,關閉流,關閉socket。伺服器循環體不變,在循環體關閉流,關閉每次accept()回傳的socket

    因為不清楚您的業務,所以不知道程式碼的真實意圖。另外也值得拓展的重點是:

    多客戶端連接,多次連接,會話管理,並發等等。

    回覆
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-18 10:49:10

    可以好好看看你的程式碼,你在while循環裡面每次都進行了關閉。

    回覆
    0
  • 取消回覆