2011-10-23 17 views
0

大家下午好!套接字:無法讀取BufferedReader和/或在某些條件下寫入PrintWriter

我試圖創建一個simnple消息應用程序,但我找不到一個大問題的解決方案。完全有兩個重大問題。

下面的代碼:

@Override 
public void run() { 
    String incoming; 
    try { 
     while (true) { 
      if (!connected) 
       break; 
      // READING 
      if (reader.ready() && (incoming = reader.readLine()) != null) { 
       notifier.putCommand(incoming, this); 
       incoming = null; 
      } 

      // WRITING 
      synchronized (messagges) { 
       for (String message : messagges) { 
        System.out.println("SENDING MESSAGE TO CLIENT: " + message); 
        writer.println(message); 
       } 
       messagges.clear(); 
      } 
      writer.println("b"); 
     } 
    } catch (IOException e) { 
     MyLogger.log(e); 
    } 
} 

問題:

  1. 如果我不每次都寫垃圾文本到客戶端(writer.println("b"))我無法讀取的BufferedReader中的任何消息,發送從中。這怎麼可能?!

  2. 在客戶端,我只看到很多「b」,但在(writer.println(message))的聲明中發送的任何內容。這真的很奇怪,因爲當我在服務器上打印SENDING MESSAGE TO CLIENT時:[...]我在控制檯中看到它,但是這個消息沒有被髮送。

這是什麼問題?

回答

1

您需要了解緩衝如何工作,特別是要學會使用flush()方法來指示緩衝寫入器實際發送數據。