2012-02-29 26 views
1

私はほとんど私のトレントサーバーで完全に完了しています。私が今やっておかなければならないことは、どのように.torrentファイルがinfoキーの "pieces"キーにどのように埋め込まれているかを知ることだけです。トレントファイルを作成するときに計算する(sha1) "pieces"

私は現在utf-8形式でエンコードされた自分のトレントファイルにこの情報を持っています。最後に表示されるハッシュは、ファイルのタイトルの所持です。コロンの前に指定したビットの長さにも近くません。作品のための長さは(ファイルサイズ/ピースの長さ)を用いて計算したビット* 20、および(ラウンド使用四捨五入):

d8:announce64:http://www.valevarkasystems.com:40/torrents/tracker/announce.php 

8:encoding5:UTF-84:infod6:lengthi71711042e4:name25:Executive Meeting480p.flv 

12:piece lengthi128000e6:pieces11205:òOìcØq¬rkÑzÎõyjZee 

どのように私はきちんと最後の「作品」キーの値を計算するのですか?

私はそれを送信で開こうとするたびに、破損したものとして読み込まれます。

私はファイルの最後に到達するまで、 "ピースの長さ"のファイルを取得し、各ピースにsha1ハッシュを作成しますか?

ありがとう、

+0

http://wiki.theory.org/BitTorrentSpecification#Info_Dictionary –

+0

@Marcブラウンあなたは多分、これはあなたが私は/だった –

+0

@MarcBを好きなら、私は両方のクラスを投稿することができ、役立つだろうBEncode/BDecode PHPのソースを見てきました私は3つのタブを開いていたことを忘れていたので、そのページを何度も参照しました。彼らは私が各ファイルをハッシュしたいと思っています。つまり、file_get_contents()はmaxlenが私のpiece_lengthのサイズですか?私はそれが私がしなければならないことだと思っていますが、わかりません。 –

答えて

2

はい。ありがとうございます。あなたはファイルからpiece sizeバイト数を読んで、それぞれの部分をSHA-1を通して独立して実行します。生成された20バイトのSHA-1ダイジェストは、あなたの作品です。バイナリという文字列になります。

fopen()を使用してデータを読み取る場合は、ファイルをバイナリモードで開く(つまり、モードを「b」と指定してください)。さもなければ、実行時に\ nがバイトストリームで\ n見つかるたびにランタイムが挿入される可能性があります。

最終的に(filesize + piece_length - 1)/piece_lengthの数になります.20を乗じた数値は、pieces文字列の長さです。

あなたはシングルファイルトレントでしか作業していないようです。マルチファイルのトレントケースはもっと複雑です。 Torrent内のすべてのファイルを連結して、ピースからファイルおよびオフセットへのマッピングを形成すると想像しなければなりません。

+0

チップをありがとう。私はバイナリフラグを使って移植性について読んだだけです。しかし、私はとにかく "file_get_contents"を使う... –

関連する問題