2010-03-31 39 views
1

我有個TCP套接字發送三行這樣在Java中沒有通過TCP接收所有消息?

 out2.println("message1\n"); 
     out2.println("message2\n"); 
     out2.println("message3\n"); 

和另一TCO插座接收和顯示這樣

 System.out.println(in.readLine()); 
     System.out.println(in.readLine()); 
     System.out.println(in.readLine()); 

但是這些消息僅在第一消息被收到並顯示,任何我發送之後不是。

編輯:這裏是代碼

private void buttonActionPerformed(java.awt.event.ActionEvent evt) {          
    try { 
     // TODO add your handling code here: 
     String ipAddress = ipTextArea.getText(); 
     sourceSocket = new Socket(ipAddress,32323); 
     out = new PrintWriter(sourceSocket.getOutputStream(), true); 
     in = new BufferedReader(new InputStreamReader(sourceSocket.getInputStream())); 
     System.out.println(in.readLine()); 
     System.out.println(in.readLine()); 
     System.out.println(in.readLine()); 
    } catch (UnknownHostException ex) { 
     Logger.getLogger(DESWashView.class.getName()).log(Level.SEVERE, null, ex); 
    } catch (IOException ex) { 
     Logger.getLogger(DESWashView.class.getName()).log(Level.SEVERE, null, ex); 
    } 


}  

cWashStations也從一個按鈕事件被稱爲:

public void cWashStations(){ 
Thread washThread = new Thread(){ 
    @Override 
    public void run(){ 
     try { 
      sSocket2 = new ServerSocket(32323); 
      Thread stationThread = new Thread(){ 
       @Override 
       public void run(){ 
        try { 
         washSocket = sSocket2.accept(); 
         out2 = new PrintWriter(washSocket.getOutputStream(), true); 
         in2 = new BufferedReader(new InputStreamReader(washSocket.getInputStream())); 
         out2.println("hello from attendant3423\n\n"); 
         out2.flush(); 
         out2.println("hello from attendant3423\n\n"); 
         out2.println("1"); 
         while(running){ 
          } 
         } catch (IOException ex) { 
          Logger.getLogger(DESAttendantView.class.getName()).log(Level.SEVERE, null, ex); 
         } 
        } 
       }; 
       stationThread.start(); 

      } catch (IOException ex) { 
       Logger.getLogger(DESAttendantView.class.getName()).log(Level.SEVERE, null, ex); 
      } 

     } 
    }; 
    washThread.start(); 
} 
+0

你可以發佈你的代碼嗎? – 2010-03-31 18:16:42

回答

2

如果使用println()不要在字符串的結尾添加\n

0

這聽起來像你正在緩衝的地方。請刪除緩衝區以進行測試或清空緩衝區。

0

呼叫out2.flush()stationThread

0

有幾件事情我不代碼中的理解,但我認爲你應該刷新緩衝區,一旦你用它做(任何理由,爲什麼你齊平的第一條消息後,而不是在最後?),並且可能你還想在最後關閉連接?

0

而是連續做了三System.out.println(in.readLine())的,儘量在一個循環中這樣做。我有一種感覺,你輸入的額外兩個'\ n'正被讀作線條。