2011-11-09 5 views
0

회사의 고객 사이트 중 하나에서 정말 이상한 문제가 있습니다. Google 시스템이 사이트의 Google 서버 중 하나에 HTTP 요청을 보내려고합니다. 서버가 DMZ 내에서 실행되는 시스템에서 실행 중입니다.HTTP 메시지 본문을받지 못했습니다.

클라이언트가 Java이고 서버가 C#입니다.

Socket s = new Socket(); 
socket.connect([server address], timeout); 

SocketOutputBuffer output = new SocketOutputBuffer (socket); 

byte[] buffer = [creating the HTTP request headers] 
output.write(buffer); 
output.flush(); 

buffer = [creating the message body] 
output.write(buffer); 
output.flush(); 

클라이언트 응용 프로그램을 디버깅

, 마지막으로 "output.flush()"마무리 -

[실제 코드로 의사 변경 편집] : 내 코드는 다음과 같은 방식으로 HTTP 요청을 전송 성공적으로 서버 쪽에서는 서버 쪽에서 HTTP 헤더 만 받았습니다.

이상한 점은 마지막 플러시 후 소켓을 닫으면 메시지 본문이 서버에 도착한다는 것입니다.

의견이 있으십니까?

고마워요.

+0

실제 코드를 보지 않고도 진단하기가 어렵습니다. 첫 번째 플러시 작동을 알고 있기 때문에 생략하고 메시지 본문 뒤에 만 플러시를 시도 했습니까? –

+0

코드를 업데이트 했으므로 첫 번째 플러시를 생략 해 보겠습니다. 감사. –

답변

0

어떤 Java? 어떤 플랫폼? 이 후에 소켓을 닫으시겠습니까? 소켓을 제대로 종료 했습니까? 많은 경우, 버퍼링 된 데이터의 전송을 완료 할 수있는 방식으로 소켓을 종료로 설정해야합니다 (플러시는 보장되지 않습니다 ...)

+0

클라이언트 측은 Android 장치 (2.1)에서 실행됩니다. "소켓을 셧다운"으로 설정한다는 것은 무엇을 의미합니까? 소켓을 닫으시겠습니까? 내 연결로 인해 서버로 데이터가 스트리밍되므로 전체 세션에서 열어야합니다. 답장을 보내 주셔서 감사합니다. –

+0

@LiorOhana : O'Rooney는 소켓을 닫을 때 아웃 바운드 데이터가 보류 중일 때 소켓 동작 방식을 지정하는 소켓의 linger 옵션을 참조합니다. 기본적으로 소켓에 대한 응용 프로그램 핸들이 이후 사용으로 무효화 되더라도 소켓은 일정 기간 동안 백그라운드에서 데이터를 계속 전송합니다. –

+0

@Remy : 내가 이해하는지 확인하기 위해 어떤 이유로 연결이 무효화되어 플러시가 작동하지 않을 수도 있습니다. 10x –

관련 문제