php – 处理具有前导长度值的套接字数据
发布时间:2020-12-13 17:11:16 所属栏目:PHP教程 来源:网络整理
导读:这是关于如何处理从网络套接字接收的带前缀消息的 follow-up question.我尝试做的是: 读取前4个字节(这是$前缀并表示消息的长度) 检查$prefix是否真的有4个字节的大小,如果它是一个整数 使用$prefix的长度读取完整的$message 检查消息是否确实具有$prefix字
这是关于如何处理从网络套接字接收的带前缀消息的
follow-up question.我尝试做的是:
>读取前4个字节(这是$前缀并表示消息的长度) 到目前为止,我有以下两行代码: $prefix = socket_read($socket,4,PHP_BINARY_READ); //No 1. //No 2: how to do the checks? $message = socket_read($socket,$prefix,PHP_BINARY_READ); //No 3. //No 4: how to do the checks? 我怎么做上述检查? 一点注意事项:通过网络套接字连接发送的所有数据都是UTF8,little-endian 解决方法
您可以通过简单地使用
strlen 来验证您收到的二进制字符串的长度:
$prefix = socket_read($socket,PHP_BINARY_READ); if (strlen($prefix) != 4) { // not 4 bytes long } 根据您之前的问题,此二进制字符串表示32位长. Unpack就这样(使用与打包时相同的格式说明符),然后获取消息并再次使用strlen来验证长度: $length = current(unpack('l',$prefix)); $message = socket_read($socket,$length,PHP_BINARY_READ); if (strlen($message) != $length) { // $message not the size of $length } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |