socket io 記得flush


  1. public class Client {  
  2.    
  3.    public static void main(String args[]) throws Exception {  
  4.       //為了簡單起見,所有的異常都直接往外拋  
  5.       String host = "127.0.0.1";  //要連接的服務端IP地址  
  6.       int port = 8899;   //要連接的服務端對應的監聽端口  
  7.       //與服務端建立連接  
  8.       Socket client = new Socket(host, port);  
  9.       //建立連接后就可以往服務端寫數據了  
  10.       Writer writer = new OutputStreamWriter(client.getOutputStream());  
  11.       writer.write("Hello Server.");  
  12.       writer.flush();//寫完后要記得flush  
  13.       writer.close();  
  14.       client.close();  
  15.    }  
  16.      

對於客戶端往Socket的輸出流里面寫數據傳遞給服務端要注意一點,如果寫操作之后程序不是對應着輸出流的關閉,而是進行其他阻塞式的操作(比如從輸入流里面讀數據),記住要flush一下,只有這樣服務端才能收到客戶端發送的數據,否則可能會引起兩邊無限的互相等待。在稍后講到客戶端和服務端同時讀和寫的時候會說到這個問題。

 

BufferedReader的readLine方法是一次讀一行的,這個方法是阻塞的,直到它讀到了一行數據為止程序才會繼續往下執行,那么readLine什么時候才會讀到一行呢?直到程序遇到了換行符或者是對應流的結束符readLine方法才會認為讀到了一行,才會結束其阻塞,讓程序繼續往下執行。所以我們在使用BufferedReader的readLine讀取數據的時候一定要記得在對應的輸出流里面一定要寫入換行符(流結束之后會自動標記為結束,readLine可以識別),寫入換行符之后一定記得如果輸出流不是馬上關閉的情況下記得flush一下,這樣數據才會真正的從緩沖區里面寫入。

 


免責聲明!

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



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