2009-09-30 3 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은 false입니다 : 여기

내가 뭘하는지입니다. 나에게 상당히 모순 된 것처럼 보입니다.

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

'차단 된 값'을 살펴본 후 문제를 발견했습니다.

기본적으로 blocked == true 인 경우 위와 같이 반환 값은 사용 가능 상태가 될 때까지 기다립니다. 차단을 해제로 설정하면 값이 바로 반환됩니다.

stream_set_blocking($fp, 0); 
관련 문제