如何通过socket进行大量返回信息的读取
来源:互联网 发布:js eval是做什么的 编辑:程序博客网 时间:2024/06/07 00:49
我们知道,TCP协议本身一个流的协议,信息之间是没有边界的,均是字节为单位的流,在使用php进行读取socket返回的时候,根据我们的应用场景,可能只需要读取一行返回即可,此时我们非常简单调用如下API即可实现:
API说明:
string fgets ( int handle [, int length])
从 handle 指向的文件中读取一行并返回长度最多为 length - 1 字节的字符串。碰到换行符(包括在返回值中)、EOF 或者已经读取了 length - 1 字节后停止(看先碰到那一种情况)。如果没有指定 length,则默认为 1K,或者说 1024 字节。
出错时返回 FALSE。
如果在读取的过程中,需要捕捉对应的读取是否超时,则可以调用:
在实际的应用当作,server返回的信息往往不是简单一号,而是一个有格式的大串,百日返回一篇文章,各个段落之间是有换行的,或者返回一个json 串,每个json的字串是有换行符,这种情况下,我们是不能直接用fgets进行读取的,否则只能读取到第一行,其他的内容将会被截断。
我们可以使用另外指定结束符的读取API:
string stream_get_line ( resource handle, int length, string ending)
Returns a string of up to length bytes read from the file pointed to by handle. Reading ends when length bytes have been read, when the string specified by ending is found (which is notincluded in the return value), or on EOF (whichever comes first). If an error occurs, returns FALSE.
通过我们指定自己的ending串,我们就可以读取整段的内容,demo如下:
但请注意:这里的读取其实每次只返回read buffer读取到的内容而已,对json串的返回,有可能读取一次是无法读取全数据,因此需要进行循环读取。
直到读取的unread_btyes=0为止,当然这里的更加严谨的做法应该是加入超时的判断。
- 如何通过socket进行大量返回信息的读取
- JAVA代码:通过Socket读取返回的数据
- JAVA代码:通过Socket读取返回的数据
- Java如何通过URL调用远程接口并读取返回信息?
- Java如何通过URL调用远程接口并读取返回信息?
- 如何通过计算信息熵,进行决策树的分裂
- Opencv3.0-python的那些事儿:(九)、Opencv关于如何读取大量视频帧进行处理的方法
- 读取socket传过来的信息
- 如何读取MP3的信息
- 当mysql中指定的socket路径改变时如何通过ODBC进行访问?
- 需要大量设计的软件如何进行敏捷开发
- 通过域名进行socket
- 如何利用Java获取进程的信息(通过tasklist和cmd与Windows进行交互)
- 通过Spring读取properties配置文件的信息 Spring 读取properties
- 一个完整的通过encoding/json信息传递格式,采用http.POST利用进行与服务器通信,并对返回结果进行解析处理的典型案例
- accept返回的socket的端口号和连接socket一样的!!! socket绑定信息结构
- 如何修改Apache返回的头部信息
- 如何修改Apache返回的头部信息
- think of goals
- Eunit学习笔记
- JPA学习笔记(二):JPA初步使用
- 编程之外的思考
- UML中的关联关系
- 如何通过socket进行大量返回信息的读取
- yum repo升级服务器快速安装手册 zz from baoz
- 目录结构
- oracle学习笔记1
- 使用skinMagic库实现界面换肤
- IO group leaders
- Adroid操作系统的移植(基于TX2440A开发板)
- Oracle10g客户端连接远程数据库配置图解
- 好麻烦