开发者社区> 问答> 正文

php socket方面的问题:报错

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

展开
收起
kun坤 2020-06-12 22:05:12 431 0
1 条回答
写回答
取消 提交回答
  • 数据包的解析是相对数据包的打包来定的,如果是比较标准的应用打包协议,例如:http,ftp等按照标准来解析就行了,如果是自定义打包的数据格式,首先要明确对方打包数据的格式,接收方才好分析,例如如下自定义数据打包协议:

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

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

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

    2020-06-12 22:05:18
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
PHP 2017.北京 全球开发者大会——高可用的PHP 立即下载
PHP安全开发:从白帽角度做安全 立即下载
复杂PHP系统性能瓶颈排查及优化 立即下载