質問

二つの引用:

すべての残りのメッセージのプロトコルの形式 <length prefix><message ID><payload>.の長さの接頭辞は、バイトビッグエンディアン値です。メッセージIDはシングル小数バイトになります。ペイロード部分にはメッセージに依存します。

request: <len=0013><id=6><index><begin><length> 

ご請求のメッセージは固定長である、請求のブロックです。のペイロードには以下の情報が含まれます。

  • index:を指定する整数値をゼロベースでの作品指数
  • 開始:を指定する整数値をゼロベースでバイト内のオフセット作品
  • 長さ:の整数を指定し、要求された長さです。

私が書くもので和5バイトまでとなります。を使用

ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
byteStream.write( 13 );
byteStream.write( 6 );
byteStream.write( index );
byteStream.write( begin );
byteStream.write( length );

message = byteStream.toByteArray();

編集:申し訳になるようにpissedが書いたします。そのbittorentプロトコルです。この スペック.

役に立ちましたか?

解決

のwrite()メソッドに書き込みにつバイトになります。

を送って頂ければおおよそcharまたはintで帯べての8ビット&0xFF.

を利用しています。オプションDataOutputStream(writeInt,writeShort等) での使用ビッグエンディアンバイト順序に従う必要がある場合がありますを整数とします。reverseBytes()(または短い。reverseBytes())を呼び出前を通り過ぎるの値をwriteXYZ()メソッドがあります。

ByteArrayOutputStream byteStream = new ByteArrayOutputStream();

DataOutputStream dout = new DataOutputStream(byteStream);

dout.writeInt( 0x13 ); // L:4
dout.write( 6 ); // L:5
dout.writeShort( index ); // guess, L:7
dout.writeLong( begin ); // >4GB support? L:15
dout.writeInt( length ); // clients accept below to 2^17, L:19

dout.flush(); // to be sure

message = byteStream.toByteArray();

備考:のスペックな状態の長さ index, beginlength.I<url> <url> <url> <url> <url> <url> <url> <url> <url> <url>のサンプルのオプションを提供しています。

編集2: 編集のサンプルに基づくD.Shawleyの回答およびスペックを発見 こちらの.

他のヒント

お使いいただくことによっておくのでこちら---の引用文が引用しないもの長さ <index>, <begin>, や <length> です。最初の見積もり、より明確に、そのメッセージから4バイトの長さは、1バイトの識別子、および任意のペイロードを解釈する。

の長さのペイロードするかのいずれかの値として指定 <length> または <length>+5によってどの <length> します。第二引の定義のうメッセージによって識別され、1バイトの識別子の0x06.したものではないでしょうかい:

  1. のペイロードのバイトをする <index><begin><length>, でも14バイトの長さ
  2. その長さが表示されている六角レンチで0x0013は小数19

いずれの場合においても、バイトストリームを使っていないであろうということのメッセージ定義 メッセージの定義を欠います。

書き込みは()バイトを書き込みます。 5ライト()の5バイトを生成します。

を参照してください。 write(int b)するます。

  

これに指定されたバイトを書き込みます。   出力ストリーム。一般的な契約   書き込みのために1つのバイトが書き込まれていることです   出力ストリームに。なるようにバイト   の下位8ビットがある書き込ま   引数b。 24上位ビット   Bは無視されます。

     

サブクラスの   OutputStreamが提供しなければなりません   このメソッドの実装ます。

     

パラメータ:       B - バイト

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top