VB6 Winsock 컨트롤을 사용하고 있습니다. 서버에 대한 POST를 수행 할 때 응답은 여러 데이터 도착 이벤트로 반환됩니다.웹 서버에 POST 또는 GET을 실행 한 Winsock 컨트롤에서 모든 데이터를 수신 한 시점을 어떻게 알 수 있습니까?
언제 모두 데이터가 도착했는지 어떻게 알 수 있습니까?
VB6 Winsock 컨트롤을 사용하고 있습니다. 서버에 대한 POST를 수행 할 때 응답은 여러 데이터 도착 이벤트로 반환됩니다.웹 서버에 POST 또는 GET을 실행 한 Winsock 컨트롤에서 모든 데이터를 수신 한 시점을 어떻게 알 수 있습니까?
언제 모두 데이터가 도착했는지 어떻게 알 수 있습니까?
내가 과거에 VB6의 Winsock을 컨트롤을 사용했다 (내가 추측하고있어 Winsock_Close 이벤트가 발생이 때이다), 모든 데이터가 도착했을 때 형식 무엇인지 내가 한 어떤 방법으로 나의 메시지는 알고 .
예 : 각 메시지는 "["로 시작하고 "]"로 끝납니다.
"[메시지 텍스트]"
데이터가 메시지 "]"말에 대한 DataArrival 이벤트 확인에서 오는
. 거기에 있다면 적어도 하나의 전체 메시지와 아마도 새로운 메시지의 시작을 받았습니다. 더 많은 메시지가 대기 중이면 메시지 데이터를 폼 수준 변수에 저장하고 다음에 DataArrival 이벤트가 발생하면 추가합니다.아니요, 모든 데이터가 도착하면 Close 이벤트가 발생하지 않으며 연결을 닫을 때 발생합니다. 모든 데이터가 전송 된 시점을 알아내는 것은 Winsock 컨트롤의 작업이 아닙니다. 클라이언트/서버 통신 프로토콜 구현의 일부로 클라이언트에게 예상 할 것을 알려줘야합니다.
클라이언트가 서버의 파일 내용을 원한다고 가정하십시오. 클라이언트는 파일에있는 데이터의 양을 모릅니다. 교환은 다음과 같이 갈 수 있습니다
이상적으로 서버는 데이터에도 체크섬을 추가하므로 예상되는 데이터 양을 얻지 못하면 어떻게해야하는지 파악하고 어떤 종류의 시간 제한 메커니즘을 구현해야합니다.
HTTP에서는 서버가 모두를 읽는 방법을 알기 위해 서버가 보내는 답장 데이터를 구문 분석하고 분석해야합니다.
먼저 서버는 CRLF로 구분 된 헤더 행 목록을 되돌려 보냅니다.이 목록은 빈 CRLF로 구분 된 행으로 종료됩니다. 나머지 데이터를 읽는 방법을 알고 싶다면 'Content-Length'및 'Transfer-Encoding'헤더의 실제 값을 조사해야합니다.
'Transfer-Encoding'헤더가 없거나 '청크 분할'항목이없는 경우 'Content-Length'헤더는 읽을 나머지 바이트 수를 지정합니다. 그러나 '전송 인코딩'헤더에 '청크'항목이 포함 된 경우 데이터가 끝나는 시점을 알기 위해 한 번에 하나씩 청크에있는 나머지 데이터를 읽고 구문 분석해야합니다 (각 청크는 자체 크기를보고합니다. 마지막 덩어리는 0의 크기를보고합니다.
아니요. '연결'헤더에 명시 적으로 '닫기'가 표시되어 있지 않으면 응답을 보내고 나면 연결을 닫을 수 없습니다. HTTP 1.1의 경우, 그 헤더는 대개 'keep-alive'로 설정됩니다. 즉, 소켓이 열린 채로있어 클라이언트가 동일한 소켓에서 더 많은 요청을 보낼 수 있습니다.
자세한 내용은 RFC 2616을 참조하십시오.