自定义协议在input方法里面接收客户端传入报文,随后return给 decode()方法时卡住了,要过几分钟才往下执行业务代码,有谁知道是什么原因导致嘛
public
static function input($recv_buffer, ConnectionInterface $connection)
{
$tempdata = bin2hex($recv_buffer);
echo "=========================收到上报数据==================== ";
$stateStr = substr($tempdata, 0, 4);
if(strcasecmp($stateStr, "7d7d") == 0){
$pos = strpos($recv_buffer, "0752");
if ($pos === false) {
return 0;
}
// 在这里程序会卡住不往下执行
return $pos;
}
return false;
期望接着往后执行
Workerman version:3.5.31
PHP version:7.3.32
接收到报文后不往下执行decode()方法,求解
input 里打印下 $tempdata ,可能数据不全。
input里每个返回值都打印下,看下返回的什么,是不是返回的0 或者 false
返回的是7d7d00000001000016001c010c05daff3238394650512154170756312e302e30300000000000000752这一串然后就卡住了
input写的不对,架设完整的数据长度为41个字节,应该返回41。但是你调用bin2hex()后数据变成82个字节,然后你
`$pos = strpos($recv_buffer, "0752");
返回长度$pos值为78,是错误的值。你应该返回 ($pos + 4)/2;是真实的长度。返回的长度是78,但实际长度是41,数据收不全,所以一直无法调用decode了
我去还真是,难怪我在win系统上面用工具测试是可以的,因为用工具直接发送的就是上面这种明文,用设备去调试发送的是ASCII格式要转换成16进制,非常感谢,谢谢谢谢