我正在编写一个简单的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 (文件结束)字符是什么吗?
发布于 2009-06-03 16:51:30
发布于 2009-06-01 07:05:36
有一个feof()可能很有用。
发布于 2009-06-10 17:23:23
我搜索了一下,没有找到任何有用的东西。然后我试着找出python中的telnetlib对这个问题做了什么(我只是在学习python),我发现即使是python库也不能搜索EOF。它只是继续读取流,直到超时,或者经过一段时间,或者搜索特殊字符串返回结果。所以我用同样的方法阅读,并解决了我的问题。感谢所有的答案和评论。我将尝试说服我的公司使用开放源码兼容许可来分发这个telnet库。如果发生这种情况,我会在这里更新。
https://stackoverflow.com/questions/933724
复制相似问题