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

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

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

 

解決方案:socket

       第一種:讀取socket流不用BufferedReader,就用InputStream網絡編程

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

      

注意:方法

使用readLine讀取一行數據,並非很好的方式。由於並不知道這一行到底有多大。理論上是能夠被惡意攻擊的。數據

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

①   每次都讀取固定大小文件

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

相關文章
相關標籤/搜索