ホームページ > バックエンド開発 > PHPチュートリアル > PHP のパックの問題について、dht のバイナリ ストリームをエンコードおよびデコードするにはどうすればよいですか?

PHP のパックの問題について、dht のバイナリ ストリームをエンコードおよびデコードするにはどうすればよいですか?

WBOY
リリース: 2016-06-23 13:35:50
オリジナル
1117 人が閲覧しました

PHPを使ってdhtクローラを作ってみました。データ送信はbencodeを使っているので問題なくエンコード、デコードできますが、find_nodeデータを送信すると取得したデータの中にノードが存在します。 dht プロトコルに従って、構造体のバイナリ ストリームを使用してエンコードされたデータは、20 バイトのノード ID + 4 バイトの IP + 2 バイトのポートです。Python でのエンコードとデコードの方法を見てきましたが、 PHP では変換できません。Python では次のように変換されます。



PHP ではこのように変換できますか? : a20 または A20 スペースが足りない場合は後者を使用

4-byte ip: L ip2long を使用して IP アドレスを符号なし長整数に変換

2-byte port: S
Pack

$s = Pack(' a20LS ', $nodeid, ip2logn($ip), 456);

解凍

$d = unpack('a20nodeid/Lip/Sport', $s);
$d['ip'] = logn2ip(' ip']);
print_r($d); //クリアになります



20バイトのノードID: a20またはA20 スペースで埋めきれない場合は後者を使用してください
4バイトのip: L ip アドレスは、ip2long を使用して符号なし長整数
2 バイトのポートに変換されます。 S

Pack

$s = Pack('a20LS', $nodeid, ip2logn($ip), 456);

Unpack

$d = unpack('a20nodeid/Lip/Sport', $s);
$d['ip'] = logn2ip($d['ip'])
print_r($d);ありがとうございます、解決しました

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート