首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在PHP中读取从套接字接收的所有数据

问在PHP中读取从套接字接收的所有数据
EN

Stack Overflow用户
提问于 2009-06-01 06:15:18
回答 4查看 3.8K关注 0票数 0

我正在编写一个简单的telnet客户端库。我使用fsockopen()打开套接字,并使用fgetc()和fwrite()对套接字进行读写。我使用fgetc()而不是fread()来处理Telnet特殊命令和选项,比如(IAC,...)。

问题是,大多数时候,我从套接字读取数据时,返回的时间太长。因为我已经分析过了,只要连接超时,就会花费很长时间,之后我就会得到结果。

下面是我的阅读方法:

代码语言:javascript
复制
protected function getChar()
{
    $char = fgetc( $this->_socket );
    return $char;
} // public function getChar()

目前,我使用此条件来确保流已完成:

代码语言:javascript
复制
$char = $this->getChar();
if ( $char === false ) {
    // end of the stream.
}

是否有其他方法可以确定流已完成,所有数据都已读取?

Udate:我认为Telnet协议中的EOF字符不是PHP期望的EOF,这就是为什么脚本找不到流的结尾。有人知道Telnet协议中的EOF (文件结束)字符是什么吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-06-03 16:51:30

尝试回显收到的每个字符的十六进制值。您应该能够看到作为EOF接收到的内容,即使PHP无法识别它。了解ord()和bin2hex()

票数 1
EN

Stack Overflow用户

发布于 2009-06-01 07:05:36

有一个feof()可能很有用。

票数 1
EN

Stack Overflow用户

发布于 2009-06-10 17:23:23

我搜索了一下,没有找到任何有用的东西。然后我试着找出python中的telnetlib对这个问题做了什么(我只是在学习python),我发现即使是python库也不能搜索EOF。它只是继续读取流,直到超时,或者经过一段时间,或者搜索特殊字符串返回结果。所以我用同样的方法阅读,并解决了我的问题。感谢所有的答案和评论。我将尝试说服我的公司使用开放源码兼容许可来分发这个telnet库。如果发生这种情况,我会在这里更新。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/933724

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档