readLine讀取socket流的時候產生了阻塞


BufferedReader的readLine方法,只要讀到流結束或者流關閉,就會返回null

在讀取文件的時候,文件結尾就是流的結尾,但對於Socket而言不是的。不能認為流中數據讀完了就是流的結尾了。Socket流還在,還是能夠繼續讀寫的。所以用Socket的輸入流封裝的BufferedReader調用readLine方法,是不會返回null的。也就發生阻塞了。

 

解決方案:

       第一種:讀取socket流不用BufferedReader,就用InputStream

       第二種:客戶端發送的時候,末尾添加換行符。取系統換行符  System.lineSeparator()

      

注意:

使用readLine讀取一行數據,並不是很好的方式。因為並不知道這一行到底有多大。理論上是可以被惡意攻擊的。

對於網絡編程而言,請求與響應的數據格式要約定好。

①   每次都讀取固定大小

②   每次讀取的報文大小由報文頭決定


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM