2009-09-30 91 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是假的。似乎與我相當矛盾。

array(7) { 
    ["stream_type"]=> 
    string(14) "tcp_socket/ssl" 
    ["mode"]=> 
    string(2) "r+" 
    ["unread_bytes"]=> 
    int(0) 
    ["seekable"]=> 
    bool(false) 
    ["timed_out"]=> 
    bool(false) 
    ["blocked"]=> 
    bool(true) 
    ["eof"]=> 
    bool(false) 
} 

有沒有人有任何想法,爲什麼我不能得到輸出?

謝謝!

回答

0

我看着'阻塞'的值,發現問題。

本質上,當阻塞== true,如上所述,那麼返回值將等待變爲可用。將其設置爲解除封鎖意味着該值將立即返回。

stream_set_blocking($fp, 0);