2013-02-06 2 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 그러나 내가 BufferedWriter + BufferedReader을 만들고 싶어, 나에게 작동하지만 난 내가 + BufferedReader, OutputStream+ InputStreamBufferedWriter 및 + PrintWriterBufferedWriter를 사용하여 몇 버전을 만들고 싶어 PrintWriter를 사용하여 솔루션을 준 .

답변

1

코드가 실제로 데이터를 보내지 않습니다. 의뢰인이 readLine()으로 전화 한 것일 수도 있습니다. 선 종결자를 보내지 않으므로 영원히 차단됩니다.

하지만 코드는별로 의미가 없습니다. 동일한 텍스트를 반복문에 쓰는 것은 의도 한 것과 다를 수 있습니다. 그리고 PrintReader과 같은 것이 없습니다.

+0

죄송합니다. 난 그냥 printWriter를보고 거기에 하나의 롤이 있다고 가정합니다. 루프에 보관하면 연결이 계속 실행되지 않습니까? 또는 어쩌면 나는 그것이 그것을 바꿀 것이다 그것을 생각하고 끝내고 있는지 보냅니다. 하지만 온라인으로 읽음을 기억하니 두 개의 스레드를 하나는 듣고 하나는 보낼 것을 말합니다. – user629283

+0

@ user62927 확실하게 두 개의 스레드를 사용할 수는 있지만 보내는 스레드가 송신 루프에서 계속 회전해야한다는 것을 의미하지는 않습니다. 보낼 물건이있을 때 보내야합니다. – EJP

+0

if (sendText =! null) if 명령으로 초기에 시도했지만 그게 효과가 없습니다. 하지만 클라이언트가 readline()을 호출하는 권리가 있습니다. 줄 종결 자 writer.newline()입니까? – user629283

관련 문제