【发布时间】:2010-10-30 08:13:20
【问题描述】:
我正在编写一个简单的 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(文件结尾)字符是什么?
【问题讨论】:
-
telnet 会话是全双工还是半双工?
-
我不确定。我怎样才能知道?