发送过来数据是十六进制的,workerman不能识别0x00,遇到就结束接收了

dq1601

发送过来数据是十六进制的,workerman不能识别0x00,遇到就结束接收了,用bin2hex,但是我用了还是不行,因为 $message根本就不完整,0x00及后面的数据都丢失了。那位大虾可以指点一二。不想用Base64等加密方法,就是想知道workerman到底能不能做到完美支持十六进制的透传,还是这本身就是一个BUG。

1999 4 0
4个回答

blogdaren

首先肯定不是BUG,然后这也是一个被问烂了的问题,裸tcp协议是基于字节流的本来就如此,简单说就是会有粘包发生,需要制定应用层通讯协议,具体看手册吧: http://doc.workerman.net/protocols/why-protocols.html

  • 暂无评论
xiuwang

服务端

<?php
require_once __DIR__ . '/vendor/autoload.php';
use Workerman\Worker;

$worker = new Worker('tcp://0.0.0.0:1238');

$worker->onMessage = function($connection, $data) {
    $connection->send($data);
};

Worker::runAll();

测试结果:
截图

客户端发送完整,workeman接收完整,workerman发送完整,客户端接收完整。
估计是你代码bug了

  • 暂无评论
qufucl

发上来看看你的解包协议?

  • 暂无评论
dq1601

谢谢各位,已经解决了,是因为包头数据长度错了,改过来就正常了

  • 暂无评论
年代过于久远,无法发表回答
🔝