2011-11-25 2 views
1

서버와 통신하기 위해 작은 클라이언트 응용 프로그램을 작성하고 있습니다. 내 클라이언트와 서버 사이에 소켓을 열고 BufferedReader를 사용하여 서버에서 나오는 모든 것을 읽을 수 있습니다. 이것은 스레드에서 읽혀집니다. 그러나 BufferedReader를 사용하여 소켓에 쓸 때 아무 일도 일어나지 않습니다!BufferedWriter 및 socket in java, write는 효과가 없습니다.

socketWritter.write(message); 
socketWritter.write("\n"); 
System.out.println(socketWritter.toString()); 
socketWritter.flush(); 

내 소켓이 제대로 열려 있지 및 무의 BufferedWriter가 제대로 초기화 :

new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())) 

내가 더이 예외가 아닌 모든 서버 응답 (그리고 서버 응답을해야한다) 여기 내 코드입니다 왜 이것이 작동하지 않는지 아이디어 ?? 도움이 될 것입니다! 감사합니다.

+1

코드가 정확합니다. 전체 코드 또는 링크 (큰 파일 용)를 게시 할 수 있습니까? – blackcompe

+0

[link] (http://db.tt/9RIqS4wR) 여기까지 제가 작성한 코드가 있습니다. 보기 파일에는 UI가 포함되어 있습니다. 도움 주셔서 감사합니다 – rmonjo

+0

이 질문은 '재생할 수 없습니다'와 같이 닫아야합니다. – EJP

답변

12

코드가 정확합니다. 필자는 클라이언트가 전송 한 내용을 에코 (echo) 할 일반 서버로 테스트했으며, 변경 사항없이 정상적으로 작동했습니다. 사용중인 서버에 결함이있을 수 있습니다. 한가지 사실은 출력 스트림에 글을 쓸 때마다 서버에 새로운 줄 문자를 추가해야한다는 것이 었습니다. 실제로는 데이터를 보내야했습니다. 나는 GUI가 아무것도받지 못하는 이유를 기꺼이 내기 위해 기꺼이 노력합니다. 다음은 내 서버의 클라이언트 스레드 클래스입니다.

class ClientThread extends Thread { 

    private Socket   sock; 
    private InputStream  in; 
    private OutputStream out; 

    ClientThread(Socket sock) { 
     this.sock = sock; 
     try { 
      this.in = sock.getInputStream(); 
      this.out = sock.getOutputStream(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

    //Echos whatever the client sends to it 
    public void run() { 
     BufferedReader bufIn = new BufferedReader(new InputStreamReader(in)); 
     BufferedWriter bufOut = new BufferedWriter(new OutputStreamWriter(out)); 
     while (true) { 
      try { 
       String msg = bufIn.readLine(); 
       System.out.println("Received: " + msg); 
       bufOut.write(msg); 
       bufOut.newLine(); //HERE!!!!!! 
       bufOut.flush(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 

     } 
    } 

} 
+0

telnet을 사용할 때 서버는 예외로 응답합니다. java에서 소켓에 쓰는 것은 텔넷 커맨드 라인에 쓰는 것과 똑같습니다. 당신의 도움을 주셔서 감사합니다. – rmonjo

+0

문자열 인코딩 문제 일 수 있습니까? 예를 들어 서버가 UTF-8을 제외하고 Ansi (또는 이와 비슷한 것) – rmonjo

+0

답변을 다시 읽고 실제로 UI는 모든 것을받습니다 (텔넷을 사용하여 서버에 로그온 할 때 살아있는 패킷 또는 정보 보관). 그러나 소켓 (텔넷을 사용하지 않음)을 쓸 때 서버는 아무 것도 얻지 못하는 것처럼 동작합니다. ((( – rmonjo

1

이 시점에서 클라이언트 코드가 작동하지 않는다는 확실한 증거는 없습니다. 특히,이 성명은 :

System.out.println(socketWritter.toString()); 

아무 것도 알려주지 않습니다. Stream 객체의 toString() 메서드는 객체의 클래스 이름과 ID 해시 코드만을 알려줍니다. 그것은 당신이 스트림에 쓴 것을 확실히 알려주지 않을 것입니다.

주어진 점을 감안할 때 flush이 작동하지 않았다는 분명한 증거는 없습니다. (은 서버 측에이 될 수 있습니다.)

+0

예, toString은 필사적 인 시도였습니다! 그것은 telnet을 사용하고 나서 서버로부터 오지 않으며, 정확히 message 변수로 보내진 것을 입력하면 서버는 응답합니다. – rmonjo