Есть сервер к которому я соединяюсь (тип соединения постоянный)
$fp = fsockopen ('200.2.2.2', '1515', $errno, $errstr, 1);
сервер выдает данные, всегда разные, как понять что он их больше не передает?
Пробовал:
do
$a = fread($fp,4096);
while (!eof($a));
и так
while (($a= fgets($fp)) !== false)
Везде я зависаю пока не закончиться время выполнения скрипта.
Как понять что больше в сокет ничего не приходит?
Спустя 1 час, 9 минут, 4 секунды (16.04.2012 - 17:37) Xpund написал(а):
$fp = @fsockopen("127.0.0.1", 1511, $errno, $errstr, 1);
if ($fp) {
//Сервер работает
}
else
{
//Сервер не работает
}
ТАк надо?
Спустя 1 минута, 30 секунд (16.04.2012 - 17:39) ADiel написал(а):
while($a = fread($fp,4096)){
// работаем с данными
}
// Данные закончились
Спустя 23 минуты, 47 секунд (16.04.2012 - 18:02) killer8080 написал(а):
Цитата (lamokk @ 16.04.2012 - 16:28) |
Как понять что больше в сокет ничего не приходит? |
на уровне сокета, никак. while(!feof($fp)) будет всегда true, пока открыт сокет. Если используется постоянное соединение, размер передаваемого контента должен определятся на уровне прикладного протокола. В случае с http эту функцию выполняет http заголовок Content-Length (для версии 1.1). Какой у вас там протокол?
Спустя 1 час, 52 минуты, 46 секунд (16.04.2012 - 19:55) lamokk написал(а):
Цитата (killer8080 @ 16.04.2012 - 15:02) | ||
на уровне сокета, никак. while(!feof($fp)) будет всегда true, пока открыт сокет. Если используется постоянное соединение, размер передаваемого контента должен определятся на уровне прикладного протокола. В случае с http эту функцию выполняет http заголовок Content-Length (для версии 1.1). Какой у вас там протокол? |
Протокол Battle.net
Спустя 2 минуты, 7 секунд (16.04.2012 - 19:57) lamokk написал(а):
Как же быть?
сокет открыть, я отправил данные, они идут, потом заканчивваются
может
или тоже не прокатит?
сокет открыть, я отправил данные, они идут, потом заканчивваются
может
do {
$a=fread($fp, 4096);
}
while (empty($a));
или тоже не прокатит?
Спустя 2 часа, 1 минута, 14 секунд (16.04.2012 - 21:59) killer8080 написал(а):
Цитата (lamokk @ 16.04.2012 - 19:55) |
Протокол Battle.net |
нет такого протокола
что там хоть принимаешь?
Спустя 20 минут, 16 секунд (16.04.2012 - 22:19) caballero написал(а):
Цитата |
я отправил данные, |
если отправляешь данные потрудись отправить их длину или признак окончания данных.
Спустя 50 минут, 30 секунд (16.04.2012 - 23:09) lamokk написал(а):
с отправкой все нормально, проблема в приеме данных (точнее в понятии их окончания)...
данные от сервера pvpgn.
данные от сервера pvpgn.
Спустя 7 минут, 21 секунда (16.04.2012 - 23:17) killer8080 написал(а):
Цитата (lamokk @ 16.04.2012 - 23:09) |
данные от сервера pvpgn |
Мне это не о чем не говорит, с игровыми серверами не работал.
Какие запросы посылаешь, и что ожидается в ответе сервера? Описание протокола есть?
Спустя 16 минут, 33 секунды (16.04.2012 - 23:33) Zerstoren написал(а):
Такс. Имел похожее дело. Но разговаривал с редисом по сокетах
возьмите fgets, вместо fread и не указывайте длинну в байтах.
А вообще передача заканчивается, когда начинают приходить \x00 байты.
возьмите fgets, вместо fread и не указывайте длинну в байтах.
А вообще передача заканчивается, когда начинают приходить \x00 байты.
Спустя 1 час, 1 минута, 30 секунд (17.04.2012 - 00:35) caballero написал(а):
Цитата |
возьмите fgets, вместо fread и не указывайте длинну в байтах. А вообще передача заканчивается, когда начинают приходить \x00 байты. |
это если строковые данные передлдаются. А если нет?
Цитата |
с отправкой все нормально, проблема в приеме данных (точнее в понятии их окончания)... данные от сервера pvpgn. |
Ну так надо описание этого конкретного протокола почитать как определяется конец данных.
Спустя 10 часов, 15 минут, 34 секунды (17.04.2012 - 10:50) Zerstoren написал(а):
Цитата (caballero @ 16.04.2012 - 21:35) | ||
это если строковые данные передлдаются. А если нет? |
когда начинают приходить 00000000
Тоже самое.