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一下,只有這樣服務端才能收到客戶端發送的數據,不然可能會引發兩邊無限的互相等待。在稍後講到客戶端和服務端同時讀和寫的時候會說到這個問題。spa

 

BufferedReader的readLine方法是一次讀一行的,這個方法是阻塞的,直到它讀到了一行數據爲止程序纔會繼續往下執行,那麼readLine何時纔會讀到一行呢?直到程序遇到了換行符或者是對應流的結束符readLine方法纔會認爲讀到了一行,纔會結束其阻塞,讓程序繼續往下執行。因此咱們在使用BufferedReader的readLine讀取數據的時候必定要記得在對應的輸出流裏面必定要寫入換行符(流結束以後會自動標記爲結束,readLine能夠識別),寫入換行符以後必定記得若是輸出流不是立刻關閉的狀況下記得flush一下,這樣數據纔會真正的從緩衝區裏面寫入。get

相關文章
相關標籤/搜索