IndyTIdTCPClientインスタンスを使用してWebサーバーと通信するDelphi6アプリケーションがあります。私がHTTPクライアントを直接使用していない理由は、サーバーが画像ストリーミングサーバーであり、画像の「プッシュ」を開始するのと同じように、ストリーミングを開始するコマンドを受信するために同じソケット接続を使用するためです。つまり、通常のHTTP POSTリクエストを送信すると、HTTPレスポンスで応答し、その直後にJPEG画像のストリームの送信を開始します。
適切なPOSTリクエストを作成し、TIdTCPClient WriteBuffer()メソッドを使用して送信し、ReadBuffer( )メソッドを使用して応答データを受信する方法をすでに知っています。代わりに、POSTリクエストを送信してから、 Content-Lengthヘッダー変数がある場合は、レスポンス本文のすべてのバイトを取得するなど、一般的なHTTPレスポンスを待つようにIndyに依頼します。もちろん、受信キューでHTTP応答の後に積み上げられた可能性のあるJPEGフレームを、要求を開始するまでそのままにしておく必要があります(つまり、HTTP応答にJPEGフレームを含めないようにします。連続した読み取り呼び出しを使用して要求するまで、ストリーミング要求コマンド)。
TIdTCPClientで呼び出すことができるメソッドはありますか?これは、本文のコンテンツのみを含む一般的なHTTP応答を完全に取得します。SendCmd()を使用して、応答のLastCmdResultプロパティ(タイプ:TIdRFCReply )を確認することを考えましたが、一部としてContent-Lengthヘッダー変数がある場合、応答本文のコンテンツも取得するかどうかをIndyドキュメントから判断できません。返される応答の一部であり、応答後に受信キューの残りの部分がそのまま残っているかどうかもわかりません。
ストリーミングを開始するためのHTTPリクエストを行った直後に、JPEGフレームのストリームをプッシュするHTTP Webサーバーとのこの混合モードの相互作用を実現するための最良の方法は何ですか?
また、データのブロックを蓄積して自分で解析するのではなく、JPEGフレームのWINBONDBOUDARY区切り文字列を使用して、Indyにフレームを分割させる賢い方法がある場合は、その手法を共有してください。