LinuxでC言語でプロキシサーバーを作成しようとしています。ストリーミングメディアで試してみるまでは、問題なく機能していました(問題なく機能していると感じていました)。
Lemmeは最初に問題を伝え、次にストリーミングメディアにジャンプします。ウェブサイトからの受信データを読み取り、それを実際のクライアントに転送するには、これを行います
count = read(websitefd,buffer,BUFSIZ);
write(clientfd,buffer,count);`
そのソケット上のすべてのデータを読み取るまで、継続的なwhileループで。
問題は、実際のWebサイトがコンテンツ長フィールドが1025バイトのHTTPパケットを送信し、他のパケットのデータの他の部分を送信する場合でも、常にBUFSIZ(8192バイト)を待ってから、8192バイトをすべて一緒にクライアントマシンに送信することです。 。octet-stream
通常の場合、実際のサーバーと同じようにパケットを転送する必要があるため、正しい方法ではないことがわかっていても、正常に機能します。したがって、実際のサーバーが1024バイトと1024バイトのサイズの2つのパケットを送信する場合、コンテンツの長さが900バイト(残りはすべてhttpヘッダーであると想定)であると言うHTTPヘッダーを持つ最初のパケットを含む2048バイトのパケットをクライアントに送信しますが、実際には2048バイトのパケットをクライアントに転送します。コンテンツタイプの場合:application / octet-streamは、すべてをダウンロードして、画像またはHTMLテキストとして表示するか、保存するように要求します。
クライアントがストリーミングメディアを要求した場合、上記の理由により、クライアントはビデオを再生できません。だから私は今何をすべきですか?私の質問を読んでくれてありがとう。私を助けてください。:)