代码之家  ›  专栏  ›  技术社区  ›  Cory Dee

PHP套接字-不读取输出

  •  0
  • Cory Dee  · 技术社区  · 17 年前

    我从插座上看东西有点问题。基本上,我可以毫无错误地连接到机器。我可以不出错地给机器写信。我好像看不到输出。

    以下是我要做的:

    $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)
    }
    

    有人知道我为什么不能得到输出吗?

    谢谢!

    1 回复  |  直到 17 年前
        1
  •  0
  •   Cory Dee    17 年前

    我查看了“阻塞”值,发现了问题。

    本质上,当blocked==true时,如上所述,返回值将等待变为可用。将其设置为unblocked意味着该值将立即返回。

    stream_set_blocking($fp, 0);
    
    推荐文章