2012-02-01 2 views
0

클라이언트 코드 :ObjectOutputStream에 전송되지 않은 데이터

try { 
      Socket socket = new Socket(ip, port); 
      OutputStream output = socket.getOutputStream(); 
      ObjectOutputStream out = new ObjectOutputStream(output); 
      InputStream input = socket.getInputStream(); 
      ObjectInputStream in = new ObjectInputStream(input); 
      out.writeByte(1); 
      FileHandler fh = (FileHandler) in.readObject(); 
      //processing stuff 
      out.flush(); 
      out.close(); 
      output.flush(); 
      output.close(); 
      input.close(); 
      in.close(); 
      socket.close(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

서버 코드 :

 try { 
      ServerSocket server = new ServerSocket(port); 
      Socket socket = server.accept(); 
      InputStream input = socket.getInputStream(); 
      ObjectInputStream in = new ObjectInputStream(input); 
      int type = in.readByte(); 
      //processing stuff (which includes closing the streams and sending FileHandler object) 
      socket.close(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

서버가 바이트를 수신하지 않습니다. 그것은 단지 클라이언트로부터의 바이트를 기다리고, 결코 오지 않는다. 나는 그것이 왜 보내지 않거나받는 지 모르겠습니다. 어떤 도움이라도 대단히 감사합니다.

답변

3

당신이 클라이언트에서 당신이 무언가를 보내는 것을 기다리는 in.readObject();을 차단했기 때문에 추측해야만한다면 출력 스트림을 플러시하지 않을 것입니다. 아무 것도 보내지 않습니다.

출력 스트림을 플러시 한 후 읽음을 으로 옮깁니다.

+0

또한 출력을 플러시하거나 닫지 마십시오. close, close 또는 close를 호출하는 OutputStream를 랩하면 (자), 포함 된 스트림을 플래시합니다. 출력 또는 입력에 대한 참조를 저장할 필요가 없습니다. 예외는 던져 질 때까지도 finally 절에 놓아야합니다. 여전히 스트림의 close()가 발생하는지 확인해야합니다. – chubbsondubs

+0

바이트를 보낸 후 플러시 할 때 서버에서 연결 재설정 오류가 발생합니다. – Stripies

+0

@ JonMannerberg - 아니요, 연결을 닫을 때 가져옵니다. 읽고 쓰기를 마칠 때까지 문을 닫지 마십시오. –

관련 문제