BufferedReader的readLine方法,只要讀到流結束或者流關閉,就會返回null編程
在讀取文件的時候,文件結尾就是流的結尾,但對於Socket而言不是的。不能認爲流中數據讀完了就是流的結尾了。Socket流還在,仍是可以繼續讀寫的。因此用Socket的輸入流封裝的BufferedReader調用readLine方法,是不會返回null的。也就發生阻塞了。網絡
解決方案:socket
第一種:讀取socket流不用BufferedReader,就用InputStream網絡編程
第二種:客戶端發送的時候,末尾添加換行符。取系統換行符 System.lineSeparator()請求
注意:方法
使用readLine讀取一行數據,並非很好的方式。由於並不知道這一行到底有多大。理論上是能夠被惡意攻擊的。數據
對於網絡編程而言,請求與響應的數據格式要約定好。客戶端
① 每次都讀取固定大小文件
② 每次讀取的報文大小由報文頭決定解決方案