【问题标题】:PHP Sockets - Not Reading OutputPHP 套接字 - 不读取输出
【发布时间】:2010-12-02 16:38:56
【问题描述】:

我在从套接字读取时遇到了一些问题。基本上,我可以毫无错误地连接到机器。我可以毫无错误地写入机器。我似乎无法读取输出。

这是我正在做的事情:

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

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

谢谢!

【问题讨论】:

    标签: php sockets telnet fsockopen


    【解决方案1】:

    我查看了 'blocked' 值并发现了问题。

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

    stream_set_blocking($fp, 0);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-10
      • 2021-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-12
      相关资源
      最近更新 更多