[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: fsockopen и fread($fp,4096) как понять что конец
lamokk
Здравствуйте.

Есть сервер к которому я соединяюсь (тип соединения постоянный)
$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)
Цитата (lamokk @ 16.04.2012 - 16:28)
Как понять что больше в сокет ничего не приходит?

на уровне сокета, никак. 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

нет такого протокола smile.gif
что там хоть принимаешь?

Спустя 20 минут, 16 секунд (16.04.2012 - 22:19) caballero написал(а):
Цитата
я отправил данные,

если отправляешь данные потрудись отправить их длину или признак окончания данных.

Спустя 50 минут, 30 секунд (16.04.2012 - 23:09) lamokk написал(а):
с отправкой все нормально, проблема в приеме данных (точнее в понятии их окончания)...
данные от сервера 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 байты.

Спустя 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)
Цитата
возьмите fgets, вместо fread и не указывайте длинну в байтах.

А вообще передача заканчивается, когда начинают приходить \x00 байты.

это если строковые данные передлдаются. А если нет?

когда начинают приходить 00000000
Тоже самое.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.