tcp网络传输,数据类型问题解说

在TCP网络传输中,原始数据需转化为`char *`类型,并精确计算字符串长度。避免将结构体直接转为字符串,可能导致长度不准确。在处理包含结构体的协议包头时,结构体转换为`char *`后,不应使用内置长度函数,应逐段累加长度。注意,结构体转`char *`后可能存在填充的``,这会影响长度计算和打印。
摘要由CSDN通过智能技术生成

不管过程中是什么数据类型,传输到发送接口的数据必须是char *,并且最好过程中明确统计字符串的长度。


packetLen=(16+cmdInfo.length())*sizeof(char);//对于单纯的string或者qstring可以用c++自带的取长度的函数取字符串长度,如果是对于c的结构体等强制转换成char*后,拼接成的字符串,一定不要用自定义的函数取长度,必须过程中分段求和。

memcpy(cmdpacket,(char *)&dataHeadInfo,16);

memcpy(cmdpacket+16,(char *)(cmdInfo.c_str()),cmdInfo.length());

特别是用过程语言开的。比如qt下,过程中可能用qstring,std::string,到最后都要转换成char *

对于传输结构体类型的协议包头,一定不要把结构体,先转换成string,然后在连接上包体,这样传输过去之后,包头的长度已经不是你结构体的固定长度,在传输到string中时,string是根据你实际占用的长度,分配内存的。肯定小于你固定的结构体的长度。<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值