2

recv を使用して http ヘッダーを取得し、コンテンツの長さを解析できるようにします。ただし、改行の検出に問題があります。または、実際に改行を検出する必要がありますか、または最初にバッファーに読み込むときは常に完全なヘッダーになります (十分な長さのバッファーがあると仮定します)。

これは C で書かれています。

編集: 関連する質問のいくつかを見ると、私が心配していることの 1 つは、"...ヘッダー ブレークの "\r\n" が、recv() への 2 つの異なる呼び出しによってバッファーに取り込まれる可能性があることです。あなたのコードはヘッダー ブレークを認識しません。」

4

3 に答える 3

5

recv()を繰り返し呼び出す必要があります。バイトが返されるたびに、渡さxれるバッファポインタがバイト単位で増加しxます(また、書き込みが許可されるcbもバイト単位で減少しxます)。これは、バッファにが含まれる\r\n\r\nか完全にいっぱいになるまで行います。その場合は、ソケットを閉じて、それ以降は悪意のあるクライアントを無視します。バッファサイズは約3000バイトである必要があります。

しかし:これはあなたのサーバーがポーリングサーバーであるように見えるという一般的な問題を無視します。経験がある場合は、代わりにepoll-serverを作成してみてください。

于 2013-02-17T21:13:32.850 に答える
0

最後に、私は次のようなことをしました:

while ( recv... > 0 ) {
     if rnrn is inside the buffer using strstr
         look for content length, output error if content length doesn't exist
     else
         keep on reading into the buffer
}

ヘッダーが見つかったら、メッセージ本文を読み続けます。

とにかくみんなありがとう、私の答えを得るために本当に非効率的な方法をやってしまいましたが、やらなければならないことは終わっています。

于 2013-02-18T01:01:44.953 に答える