получение пиров через dht из php

интернет php торрент p2p

Имеется код такого вида. Как описано на bittorrent.org в 5 beep, что клиент должен использовать udp порт аналогичный использующему tcp порту. Но при соединении к этому порту, скрипт просто грузит ничего и висит просто....

Что я не понял, или не дочитал. кто может объяснить?

<?php
function bencode ($var)
{
if (is_string($var))
{
return strlen($var) .':'. $var;
}
else if (is_int($var))
{
return 'i'. $var .'e';
}
else if (is_float($var))
{
return 'i'. sprintf('%.0f', $var) .'e';
}
else if (is_array($var))
{
if (count($var) == 0)
{
return 'de';
}
else
{
$assoc = false;

foreach ($var as $key => $val)
{
if (!is_int($key))
{
$assoc = true;
break;
}
}

if ($assoc)
{
ksort($var, SORT_REGULAR);
$ret = 'd';

foreach ($var as $key => $val)
{
$ret .= bencode($key) . bencode($val);
}
return $ret .'e';
}
else
{
$ret = 'l';

foreach ($var as $val)
{
$ret .= bencode($val);
}
return $ret .'e';
}
}
}
else
{
trigger_error('bencode error: wrong data type', E_USER_ERROR);
}
}


$fp = fsockopen("udp://178.91.169.56", 54757, $errno, $errstr, 30);
flush();
if (!$fp) {
echo "$errstr ($errno)<br />\n";
} else {
//{"t":"aa", "y":"q", "q":"ping", "a":{"id":"abcdefghij0123456789"}}
//c519f93421ae40069805b6b7e46019bd0d382b26
$data = array(
't' => 'aa',
'y' => 'q',
'q' => 'ping',
'a' => array(
'id' => 'c519f93421ae40069805b6b7e46019bd0d382b26'
));

$out = bencode($data);
fwrite($fp, $out);
while (!feof($fp)) {
echo fgets($fp, 1280);
flush();
}
fclose($fp);
}
Ответы:
udp не поддерживает соединений, только прием и отправка пакетов. Попробуйте работать с неблокирующими сокетами. Ответ может приходить на какой-то другой ваш фиксированный порт, например, 25. Поставьте wireshark и детально изучите протокол обмена сначала программы торрента, а потом вашего скрипта. Найденные отличия и должны служить отправной точкой, куда копать.


13 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.