2013-02-06 71 views
0

我試圖使用BufferedWriter從客戶端或服務器向客戶端發送消息到服務器。然而,沒有東西會發送,但是如果你發送消息它會聽。我不確定我在做什麼錯,但我認爲問題出在這裏。java套接字無法使用BufferedWriter發送消息

ActionListener buttonActive= new ActionListener(){ 
      public void actionPerformed(ActionEvent e) { 
       messageTextArea.append(textMessage.getText()+ "\n"); 
       sendText = textMessage.getText(); 
      } 
     }; 
     sendButton.addActionListener(buttonActive); 

    private void startSending(){ 

     SwingWorker <Void, Void> sendingThread = new SwingWorker <Void, Void>(){ 
      protected Void doInBackground() throws Exception { 

       BufferedWriter writer = null; 
       writer = new BufferedWriter(new OutputStreamWriter(connection.getOutputStream())); 
       while(connected){ 
        writer.write(sendText); 
        writer.flush(); 
       } 
       return null; 
      } 
     }; 
     sendingThread.execute(); 
    } 

@trashgod和@madProgrammer給我使用的PrintWriter我想我要使用BufferedWriter + BufferedReaderOutputStream+ InputStreamBufferedWriter + PrintWriter幾個版本,它的作品,但一個解決方案,但是我想使BufferedWriter + BufferedReader

回答

1

你的代碼確實發送數據。也許客戶撥打readLine()?由於您沒有發送行終止符,它會永遠阻止。

但是你的代碼沒有多大意義。在一個循環中寫入相同的文本不可能是你想要的。並沒有像PrintReader這樣的事情。

+0

對不起,我剛剛看到printWriter,並假設有一個大聲笑。如果我將它保留在循環中,它不會保持連接運行嗎?或者也許我在想我會改變它,看看是否發送。但我確實記得在線閱讀,它說我應該有2個線程一個聽和一個發送 – user629283

+0

@ user62927當然,你可以使用兩個線程,但這並不意味着發送線程應該繼續在發送循環中旋轉。當有東西要發送時它應該發送。 – EJP

+0

我試過,如果發言如果(sendText =!null),但沒有工作。但是你的權利是客戶正在調用readline();是行結束符writer.newline()? – user629283