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

Started by Wertos on 2013-05-23 12:04 — 29 replies, 4131 views

#11
$rowset = unpack('N*',$data['peers']);
Это потому что формат только для ip указан как N, для порта пакуется как n
$peers = unpack('Nip/nport',$data['peers']);
$peer_info = long2ip($peers['ip']).':'.$peers['port'];
Как-то так
#12
Nightmare, кланяюсь в ноги !!!!!! всё отлично... получил человекопонятный массив !!!
#13
что-то не то 😀 IP как будто из одной подсети )))))
#14
Скорее всего трекер так и отдает, никаких дополнительных манипуляций сам трекер не производит
#15
В своём варианте, когда получал IP без порта, IP были верны.
#16
$peer_info = long2ip(encode_ip($peers['ip'])).':'.$peers['port'];
А если так, как вариант?
#17
Дело в том что
unpack('N*',$data['peers']) возвращает массив из которого я получаю правильные IP
а
unpack('Nip/nport',$data['peers']) какой-то 1 неправльный IP с неправильным портом 🙂
#18
'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', тогда вернет только порт
#19
$rowset = unpack('Nip/nport',$data['peers']);
var_dump($rowset);
выводит
array(2) { ["ip"]=> int(1370333731) ["port"]=> int(28125) }
это всё....
#20
array(2) { ["ip"]=> int(1370333731) ["port"]=> int(28125) }
ну ip в формате long, то еcть его необходимо перевести функцией long2ip()

Spoiler content hidden.

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