2013-05-29 2 views
4

내 목표는 서버에서 객체를 요청하는 데 사용되는 Java 소켓 을 기반으로하는 간단한 요청 - 응답 패턴을 구현하는 것입니다.Java 소켓 : 객체 스트림을 사용한 요청 - 응답 패턴

그것은 다음과 같이 작동합니다 :

  1. 클라이언트는 서버가 평가 서버에 메시지를 보냅니다. 그가받은 것을 에 따라 특정 기능이 호출됩니다. 이 부분은 작동합니다.
  2. 서버는 요청 된 데이터를 ObjectOutputStream에 기록합니다. 이것 역시 작동합니다. 오류 메시지가 표시되지 않습니다.
  3. 클라이언트는 프로그램이 while 루프를 종료하게하는 CLOSE 메시지를 수신 할 때까지 입력 스트림에서 데이터를 읽습니다. 이것은 정상적으로 작동하지 않습니다. 여기

몇 가지 중요한 코드 조각입니다 :

// Client (Sending request) *** WORKS 

objectOutputStream.writeInt(GET_OBJECT); 
objectOutputStream.flush(); 


// Server (After receipt of the message) *** WORKS 
objectOutputStream.writeInt(object); 
objectOutputStream.writeInt(CLOSE); 



// Client (Reading the answer from the server) *** WRONG 

while(true){ 
int i = objectInputStream.readInt(); 
if(i == CLOSE) 
break; 
} 
+0

? 뭐든지 – greedybuddha

+0

안녕하세요! 그것은 아무것도 반환하지 않았다. 그러나 Marko는 서버에서 flush()를 잊어 버렸음을 알고 있습니다. – user1812379

답변

2
  1. 당신은 클라이언트 측에서 flush 있고, 메시지가 서버에 의해 수신;
  2. 서버 쪽에서는 flush이없고 메시지가 클라이언트에 수신되지 않습니다. 나는이 두 가지 사실에서 패턴을 발견

... 그것은`i`의 값을 반환 무엇

+0

감사합니다. 이제는 작동하지만 여전히 신뢰할 수 없습니다. 때로는 서버에서 메시지를 수신하는 경우가 있습니다. – user1812379

+0

@ user1812379 글쓰기에서 읽기로 전환 할 때마다 플러시해야합니다. – EJP

관련 문제