網絡編程中服務器發送的消息,客戶端收不到也沒有反應的幾點原因

在使用 PrintWriter  時出現的問題

 原因: 因爲PrintWriter.print()比PrintWriter.println()少了換行符,客戶端永遠收不到一行結束的標誌。

            直到服務器退出時客戶端纔可以看見返回的消息

 

 

在使用 BufferedWriter  時也會出現同樣的問題

當使用write()方法時爲了避免上述問題可以這樣使用:

 

還有一種可能是在關閉流的時候把socket也關閉了。

例如,當這個socket既有讀又有寫(socket.getInputStream() ,  socket.getOutputStream())的時候,

當讀完了數據,以後也不再用了這個流了,根據流的使用原則,此時流應該關閉,但是在socket中,我嘗試了很多次,

當關閉任何一個與socket有關的流時,再去判斷socket,卻發現此時socket已經關閉。程序會報異常。

 

有可能是我的程序有問題,但是根據以上思路,我嘗試了另一種解決方法:

 

方法原理很簡單,就是在流之間傳遞數據的時候,在最後面加上一個標誌字符串,譬如“end”並且單獨成行,

那麼在讀取流數據的時候,就可以判斷是否讀到最後了,如果讀到最後,則使用 break退出循環,而流不再顯示關閉。

 

這樣就不會出現阻塞現象,程序可以很好的跑起來

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章