ダウンロードの最初にコンテンツの長さを利用できます。だから私は私が要求する必要があるバイト数を知っています。1024バイト単位でダウンロードします。最後のチャンクで、残りのバイト数を要求します。読み取り機能を使用しています。しかし、最後のチャンクが到着するまでにはかなりの時間がかかります。正常ですか?
3 に答える
3
たぶん、最後のチャンクはバッファをフラッシュするのに十分な大きさではありません。
fdをフラッシュする方法を確認し、最後のチャンクが送信された後に手動で行うことができます。
于 2009-09-21T13:17:15.083 に答える
2
いいえ。私の推測では、サーバーにへの呼び出しがないflush()
ため、タイムアウトになるまで出力がバッファにハングします(その後、サーバーはフラッシュします)。
于 2009-09-21T13:18:06.057 に答える
0
おかげで私は問題を理解しました。私のコードはアプリケーションレベルのバッファーを使用しているため、最後のチャンクのダウンロードに長い時間がかかります。私はブライアントの本に記載されている堅牢なio関数を使用しています。私はしばらく前にそのコードを研究していて、それを忘れていました。コードを修正したところ、コードでバッファリングが使用されていることがわかりました。
私が犯したもう1つの間違いは、HTTP/1.1を使用することでした。HTTP 1.0を使用すると、サーバーはデータを送信すると接続を閉じます。これで問題は解決しました。
于 2009-09-21T16:29:20.667 に答える