整理最近调试nannomsg遇到很多坑,写个博客整理一下
1.消息接收
这里我在项目中遇到一个坑的地方:
在一个Nanomsg类中实现消息接收,
class Nanomsg
{
bool Nanomsg_slave:: recv(uint8_t *data , int &len)
{
len = nn_recv(_sock, &data, NN_MSG, 0);
printf("len :%d data_recv: ",len);
for (size_t i = 0; i < len; i++)
{
printf("%02x ", data[i]);
}
printf("\n");
if (len>0)
{
return true;
}else{
return false;
}
}
}
别的地方传入buf指针调用函数
Nanomsg _nano_m;
uint8_t buff;
_nano_m.read(buff ,len );
printf("len :%d ,buff: ",len);
for (size_t i = 0; i < len; i++)
{
printf("%02x ", buff[i]);
}
照理说两个打印应该是一样的,然而实际打印出来数据完全不一致
查阅官方手册说明如下

本文记录了在使用Nanomsg库进行消息接收时遇到的问题及解决方案。通过分析nn_recv函数的使用,发现原始代码中直接将接收的数据赋值给外部指针导致数据不一致。修正方法是利用nn_recv内部分配的内存,并在处理完消息后释放。修复后的代码成功实现了正确的数据传递。
最低0.47元/天 解锁文章
2000

被折叠的 条评论
为什么被折叠?



