Indy TIdTCPClient 인스턴스를 사용하여 웹 서버와 통신하는 Delphi 6 응용 프로그램이 있습니다. 서버가 이미지를 다시 "푸시"하기 시작하는 것처럼 스트리밍을 시작하기위한 명령을 수신하기 위해 소켓 연결을 사용하는 이미지 스트리밍 서버이기 때문에 HTTP 클라이언트를 직접 사용하지 않는 이유가 있습니다. 즉, 일반적인 HTTP POST 요청을 보내면 HTTP 응답으로 응답하고 그 직후에 JPEG 이미지 스트림을 보내기 시작합니다.Indy TIdTCPClient 인스턴스를 사용하여 응답 본문을 포함한 웹 서버에서 전체 HTTP 응답을 검색하려면 어떻게합니까?
는 이미 응답 데이터를 수신 할 저는 ReadBuffer() 방법을 사용 후 적절한 POST 요청을 공예와의 TIdTCPClient WriteBuffer() 방법을 사용하여 전송하는 방법을 알고있다. 대신에 POST 요청을 보낸 다음 Content-Length 헤더 변수가 있으면 응답 본문의 모든 바이트를 검색하는 등의 일반적인 HTTP 응답을 기다리도록 Indy에 요청해야합니다. 물론 요청을 시작할 때까지 수신 대기열의 HTTP 응답 이후에 쌓여있는 JPEG 프레임은 그대로두기를 원합니다 (즉, HTTP 응답의 JPEG 프레임을 포함하고 싶지 않습니다. 연속적인 읽기 호출을 사용하여 요청할 때까지 내 스트리밍 요청 명령).
본문 내용이 포함 된 일반적인 HTTP 응답을 완전히 검색하는 TIdTCPClient에서 호출 할 수있는 메서드가 있습니까? 나는 SendCmd()을 사용하고 LastCmdResult 부동산 (유형 : TIdRFCReply) 검사에 대해 생각 응답을하지만, 너무 응답 본문 내용을 검색하는 경우 이 있다면 나는 인디 문서에서 말할 수 없다 Content-Length 헤더 변수는 반환하는 응답의 일부로, 응답을받은 후 나머지 수신 큐를 남겨 둘지 여부를 알 수 없습니다.
스트리밍을 시작하기 위해 HTTP 요청을 한 직후에 JPEG 프레임 스트림을 푸는 HTTP 웹 서버와의 혼합 모드 상호 작용을 수행하는 가장 좋은 방법은 무엇입니까?
또한 Indy가 JPEG 프레임 WINBONDBOUDARY 문자열을 사용하여 프레임을 분할 할 경우 데이터 블록을 모으고 직접 구문 분석하지 말고 해당 기술을 공유하십시오.
왜 'TIdTCPClient'를 직접 사용하고'TIdHTTP'가 아닌가요? 'TIdHTTP'는 당신을위한 응답을 처리하며 약간의 추가 작업으로 스트리밍 데이터를 읽을 수 있습니다. (기본적으로 스트리밍 데이터를 지원하지 않습니다.) –
@RemyLebeau - 로봇에 반복적 인 HTTP 명령을 보내야합니다. 명령들 사이에 약간의 일시 정지가 있으면 모터가 감기고 부드럽게 움직이는 것을 불가능합니다. 원래 TIdHTTP 구성 요소를 사용했지만 다른 게시물에서 나에게 준 유지 팁은 있지만 응답이 충분하지 않습니다. 때로는 즉시 반환되고, 응답을 받으려면 200-500, 심지어 3000 밀리 초가 걸립니다. 이것은 모두 배경 스레드에 있습니다. TIdTCPClient로 전환하고 HTTP 핸드 셰이 킹을 직접 처리하면 모든 문제가 사라졌습니다. –
최신 버전의 Indy를 사용하고 있다면 'TIdHTTP.HTTPOptions' 속성이 너무 오래 전에 응답 지연을 다루는 새로운'hoWaitForUnexpectedData' 플래그로 업데이트되지 않았습니다. 플래그가 비활성화되어 있는지 확인하십시오. –