Структура ответа от анонсера

$rowset = unpack('N*',$data['peers']);
Это потому что формат только для ip указан как N, для порта пакуется как n
PHP:
$peers = unpack('Nip/nport',$data['peers']);
$peer_info = long2ip($peers['ip']).':'.$peers['port'];
Как-то так
 
Nightmare, кланяюсь в ноги !!!!!! всё отлично... получил человекопонятный массив !!!
 
Скорее всего трекер так и отдает, никаких дополнительных манипуляций сам трекер не производит
 
Дело в том что
unpack('N*',$data['peers']) возвращает массив из которого я получаю правильные IP
а
unpack('Nip/nport',$data['peers']) какой-то 1 неправльный IP с неправильным портом :)
 
'N*' говорит о том, что беззнаковый long стоит и указывает только на IP, причем '*' это имя индекса и оператор повторения, то есть если сделать так
$peers = unpack('N*',$data['peers']);
то обращение к определенному элементу массива будет выглядеть как $peers['*'], $peers['*1'],..., $peers['*i']
если формат написать unpack('Nip/nport',$data['peers']), тогда
$peers['ip'], $peers['ip1'],..., $peers['ipi']
$peers['port'], $peers['port1'],..., $peers['porti']
Можно обозвать 'N*/nanythingelse' главное что N - это long, n - short, те форматы, в которые пакует анонсер
и без 'N/n' функция не понимает на что разбивать строку, и выдает только ip так как указан формат N, а если указать 'n', тогда вернет только порт
 
$rowset = unpack('Nip/nport',$data['peers']);
var_dump($rowset);
выводит
array(2) { ["ip"]=> int(1370333731) ["port"]=> int(28125) }
это всё....
 
array(2) { ["ip"]=> int(1370333731) ["port"]=> int(28125) }
ну ip в формате long, то еcть его необходимо перевести функцией long2ip()

long2ip(1370333731) => 81.173.162.35

А порт вполне реальный
 
Back
Top