Гость
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Сокет, чтение, бесконечный цикл / 6 сообщений из 6, страница 1 из 1
25.07.2018, 12:44
    #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
25.07.2018, 14:05
    #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
26.07.2018, 15:28
    #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
26.07.2018, 18:41
    #39679823
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сокет, чтение, бесконечный цикл
Курлом то не проще?
...
Рейтинг: 0 / 0
27.07.2018, 09:49
    #39680018
Дегтярев Евгений
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сокет, чтение, бесконечный цикл
> fsockopen($urlinfo['host'], 80, $errno, $errstr, 30);
и много сейчас а сайтов без https?
...
Рейтинг: 0 / 0
27.07.2018, 14:14
    #39680222
Toxic Phantom
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сокет, чтение, бесконечный цикл
Дегтярев Евгений> fsockopen($urlinfo['host'], 80, $errno, $errstr, 30);
и много сейчас а сайтов без https?
>кусок моего олдового кода
>олдового кода
>олдового кода
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Сокет, чтение, бесконечный цикл / 6 сообщений из 6, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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