php socket方面的问题

大地之灯 发布于 2016/07/27 18:13
阅读 211
收藏 0
PHP

@狮子的魂 你好,想跟你请教个问题:主要是二进制字节流,tcp传输一次可能有多个包或者半个包,那我在php这边怎么解包呢?保证收到有效的数据包  丢弃无效的数据包呢?希望大神有时间能回答一下,不胜感激 工作中遇到的问题,,,,,,新手 不懂解决

加载中
0
狮子的魂
狮子的魂

数据包的解析是相对数据包的打包来定的,如果是比较标准的应用打包协议,例如:http,ftp等按照标准来解析就行了,如果是自定义打包的数据格式,首先要明确对方打包数据的格式,接收方才好分析,例如如下自定义数据打包协议:

+---------+----------+--------------------+
| 1 byte | 2 bytes | dynamic bytes |
+---------+----------+--------------------+
 数据类型   数据长度  数据字节码

每个数据包的第一个字节表示数据的自定义类型(例如:文字,还是图片,还是视频),接下来的两个字节表示数据的长度,再后面就是实际发送的数据。

那么你在接收的时候,就可以先拿到套接字的第一个字节得到数据包的类型(判断数据是否需要?),再接下来获取两个字节转换成整数得到后面数据的长度len,再通过后续读取len个字节来得到数据包的实际数据!

OSCHINA
登录后可查看更多优质内容
返回顶部
顶部