我正在编写一个简单的 telnet 客户端库。我使用 fsockopen() 打开套接字并使用 fgetc() 和 fwrite() 读写套接字。我使用 fgetc() 而不是 fread() 来处理 Telnet 特殊命令和选项,例如 (IAC, ...)。
问题是大多数时候我从套接字读取,返回需要太长时间。正如我所描述的那样,只要连接超时,它就会花费很长时间,然后我就有了结果。
这是我的阅读方法:
protected function getChar()
{
$char = fgetc( $this->_socket );
return $char;
} // public function getChar()
目前我使用这个条件来确保流完成:
$char = $this->getChar();
if ( $char === false ) {
// end of the stream.
}
有没有其他方法可以确定流已完成并读取所有数据?
Udate:我认为 Telnet 协议中的 EOF 字符不是 PHP 所期望的 EOF,这就是脚本找不到流结尾的原因。有谁知道 Telnet 协议中的 EOF(文件结尾)字符是什么?