2009-09-30 7 views
0

У меня проблемы с чтением из сокета. В принципе, я могу подключиться к машине без ошибок. Я могу писать на машину без ошибок. Кажется, я не могу прочитать результат.PHP-сокеты - не чтение вывода

Вот что я делаю:

$header1 = chr(0xFF).chr(0xFB).chr(0x1F).chr(0xFF).chr(0xFB).chr(0x20).chr(0xFF).chr(0xFB).chr(0x18).chr(0xFF).chr(0xFB).chr(0x27).chr(0xFF).chr(0xFD).chr(0x01).chr(0xFF).chr(0xFB).chr(0x03).chr(0xFF).chr(0xFD).chr(0x03).chr(0xFF).chr(0xFC).chr(0x23).chr(0xFF).chr(0xFC).chr(0x24).chr(0xFF).chr(0xFA).chr(0x1F).chr(0x00).chr(0x50).chr(0x00).chr(0x18).chr(0xFF).chr(0xF0).chr(0xFF).chr(0xFA).chr(0x20).chr(0x00).chr(0x33).chr(0x38).chr(0x34).chr(0x30).chr(0x30).chr(0x2C).chr(0x33).chr(0x38).chr(0x34).chr(0x30).chr(0x30).chr(0xFF).chr(0xF0).chr(0xFF).chr(0xFA).chr(0x27).chr(0x00).chr(0xFF).chr(0xF0).chr(0xFF).chr(0xFA).chr(0x18).chr(0x00).chr(0x58).chr(0x54).chr(0x45).chr(0x52).chr(0x4D).chr(0xFF).chr(0xF0); 
$header2 = chr(0xFF).chr(0xFC).chr(0x01).chr(0xFF).chr(0xFC).chr(0x22).chr(0xFF).chr(0xFE).chr(0x05).chr(0xFF).chr(0xFC).chr(0x21); 

    $fp = pfsockopen('ServerName',$port,$errno,$errstr,35); 
    if(!$fp) { 
     echo '<p>Error connecting to system.</p>'; 
     echo $errstr . ' (' . $errno . ')'; 
    } else { 
     fputs($fp, $header1); 
     sleep(1); 
     fputs($fp, $header2); 
     sleep(1); 
     fputs($fp, "99\r"); 
     sleep(3); 

     $read = fread($fp, 128); 
     $pos = socket_get_status($fp); 
     echo '<pre>'; 
     var_dump($pos); 
     echo '</pre>'; 
     //$read = fread($fp,$pos["unread_bytes"]); 
     //$read = str_replace("\n","<br>",$read); 
     //$explode = explode("\"",$read); 
    } 
    fclose($fp); 

Что действительно странно для меня является то, что socket_get_status() непрочитанных байт 0, но EOF ложно. Кажется мне довольно противоречивым.

Есть ли у кого-нибудь идеи, почему я не могу получить выход?

Спасибо!

ответ

0

Я просмотрел «заблокированное» значение и нашел проблему.

По существу, при блокировке == true, как указано выше, возвращаемое значение будет ждать, чтобы стать доступным. Установка его для разблокировки означает, что значение будет возвращено сразу.

stream_set_blocking($fp, 0);