powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Сокет, чтение, бесконечный цикл
6 сообщений из 6, страница 1 из 1
Сокет, чтение, бесконечный цикл
    #39678849
AlexSSSS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть некое устройство. Открываю сокет, посылаю команду, читаю ответ.
Если устройство "свободно" - все хорошо.
Но если оно занято, то начинается бесконечный цикл...
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
$fp = fsockopen($IpAddr, $Port, $errno, $errstr, 5); 
....
$Priznak=1; 
$Stroka = "";
$u=0;		
        while ($Priznak) { 
            $char = fgetc($fp);  
			//echo "char=" . ord($char) . "\n";
			//$u++;
			//if ($u > 2000) $Priznak = 0;
            $Stroka = $Stroka . $char; 
            if (iconv_strlen($Stroka)>13){ 
                $Str_temp = iconv_substr($Stroka, -15);  
                if ($Str_temp==$RRR) 
                    $Priznak = 0; 
            } 
        }; 
fclose($fp);
....


Если убрать коментарии в цикле - в переменной char - всегда символ с кодом 0 (??? или надо проверять $char === false и выходить из цикла)...
Проверка на eof не годится, ответ XML и заканчивается на </ИмяПараметра>
...
Рейтинг: 0 / 0
Сокет, чтение, бесконечный цикл
    #39678927
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexSSSS,

Может как-то так?

Код: php
1.
2.
3.
4.
5.
if (false !== ($bytes = socket_recv($socket, $buf, 2048, MSG_WAITALL))) {
    echo "Read $bytes bytes from socket_recv(). Closing socket...";
} else {
    echo "socket_recv() failed; reason: " . socket_strerror(socket_last_error($socket)) . "\n";
}
...
Рейтинг: 0 / 0
Сокет, чтение, бесконечный цикл
    #39679709
Toxic Phantom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сокеты бывают подвисают особенно если постоянно их долбить. Вот вам кусок моего олдового кода, из бота который обходил миллионы сайтов и по ссылкам переходил... Он редко виснет, самый живучий вариант. (около 100 копий одновременно работало по моему)
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
   $fp = @fsockopen($urlinfo['host'], 80, $errno, $errstr, 30);
        if (!$fp)
        {
            //echo "error!\n";
            return ($return_mass);
        } else
        {
            //echo "connected!\n";
            $out = "GET " . $urlinfo['path'] . $query . " HTTP/1.1\r\n";
            $out .= "Host: " . $urlinfo['host'] . "\r\n";
            $out .= "Accept: text/html, application/xhtml+xml, */*\r\n";
            $out .= "Accept-Language:  en-US\r\n";
            $out .= "User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko\r\n";
            $out .= "DNT: 1\r\n";
            $out .= "Referer: " . $referer . "\r\n";
            $out .= "Connection: Close\r\n\r\n";
            //echo "sending request...";
            @fwrite($fp, $out);
            stream_set_timeout($fp, 10);
            //echo "done!\n";
            $r = '';
            //echo "reading responce...";
            while (!@feof($fp))
            {
                $r = $r . @fgets($fp, 128);
            }
            //echo "done!\n";
            $info = stream_get_meta_data($fp);
            if ($info['timed_out'])
                echo "connection timed out!\n";

            @fclose($fp);
        }
...
Рейтинг: 0 / 0
Сокет, чтение, бесконечный цикл
    #39679823
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Курлом то не проще?
...
Рейтинг: 0 / 0
Сокет, чтение, бесконечный цикл
    #39680018
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> fsockopen($urlinfo['host'], 80, $errno, $errstr, 30);
и много сейчас а сайтов без https?
...
Рейтинг: 0 / 0
Сокет, чтение, бесконечный цикл
    #39680222
Toxic Phantom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дегтярев Евгений> fsockopen($urlinfo['host'], 80, $errno, $errstr, 30);
и много сейчас а сайтов без https?
>кусок моего олдового кода
>олдового кода
>олдового кода
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Сокет, чтение, бесконечный цикл
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]