2

ファイル共有用のミドルウェア システムを実装する必要があり、さまざまなソースから別々の部分を同時に送受信する bittorrent と同じように、ファイルを分割する必要があります。それ、どうやったら出来るの?それはライブラリですか、それともファイル分割を自分で実装する必要がありますか?

4

4 に答える 4

4

ファイルをブロックに分割して、それぞれ 100KB とします。次に、各ブロックで SHA ハッシュ (またはその他のハッシュ アルゴリズム) を計算します。したがって、ファイルが 905KB の場合、そのようなハッシュが 10 個計算されます。

サーバーには、提供する各ファイルのハッシュ定義ファイルが含まれます。このハッシュ定義ファイルには、ファイルのすべてのブロックのリストとハッシュが含まれます。したがって、サーバーが test.exe と呼ばれる 905 KB のファイルを提供している場合。次に、ファイルの 10 個のハッシュのリストを含む test.exe.hashes という別のファイルを作成します。

クライアントはハッシュ定義ファイルをダウンロードし、すべてのブロックが含まれていることを確認します。クライアントは各ブロックを個別に要求でき、ダウンロード後、最後にハッシュを再度計算して、破損がないことを確認できます。

ファイルを物理的に分割する必要はありません。ファイルの分割は、関心のある部分を読み取るだけです。ファイルの最初のブロックはバイト範囲 0 から 102399 で、次のブロックは 102400 から 204800 です。等々。したがって、ファイルを開き、その位置をシークし、データを読み取り、ファイルを閉じるだけです。

于 2008-09-30T19:29:27.530 に答える
0

ソロモンリードエンコーディングの使用を検討することをお勧めします。これにより、最終ブロックの取得がはるかに簡単になります。これは、MicrosoftがAvalaunchで採用したルートです。

于 2009-03-28T21:52:38.743 に答える
0

興味がない: BitTorrent などを実装してみませんか? 多くの OpenSource クライアント ( Azureusなど) があり、プロトコルは非常に単純です。もう少し詳細な記事もありますが、これにはいくつかの拡張機能が含まれています。疑いなく、公式の仕様は常に正しいです。

于 2009-03-28T21:59:40.927 に答える
0

Split & Concat (GNU ソフトウェア) の実装を見てください。

于 2008-09-30T19:43:05.920 に答える