关于char*判断长度的问题,急求~~~~

馋比劳 2013-11-13 05:15:49
我做了一个客户端,能接受服务器发过来的数据包。
所以我声明了一个全局的char buffer[4096]用来存储数据,也就是char*
选的是TCP协议,包的顺序可以保证,但是有可能分多次发送,所以我现在写了一个用来拼包
中间存储都是用char*,结果在判断长度上出问题了,数据包里面有可能出现'\0',我用strlen判断长度就不行了,有没有好的方法判断char*的长度啊,不局限于字符的....跪求啊
...全文
3015 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2013-11-13
  • 打赏
  • 举报
回复
void HexDump(char *buf,int len) {
    int i,j,k;
    char binstr[80];

    for (i=0;i<len;i++) {
        if (0==(i%16)) {
            sprintf(binstr,"%04x -",i);
            sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);
        } else if (15==(i%16)) {
            sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);
            sprintf(binstr,"%s  ",binstr);
            for (j=i-15;j<=i;j++) {
                sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.');
            }
            printf("%s\n",binstr);
        } else {
            sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);
        }
    }
    if (0!=(i%16)) {
        k=16-(i%16);
        for (j=0;j<k;j++) {
            sprintf(binstr,"%s   ",binstr);
        }
        sprintf(binstr,"%s  ",binstr);
        k=16-k;
        for (j=i-k;j<i;j++) {
            sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.');
        }
        printf("%s\n",binstr);
    }
}
不知道有多少前人掉在TCP Socket send(人多)send(病少)send(财富) recv(人多病)recv(少财富) 陷阱里面啊! http://topic.csdn.net/u/20120210/09/51109ed0-07b9-41f2-b487-a51597f2ca01.html
馋比劳 2013-11-13
  • 打赏
  • 举报
回复
好吧,看来只能这样了..唉
Exaybachay 2013-11-13
  • 打赏
  • 举报
回复
如果交互协议是基于文本的, 不妨用换行, http smtp pop 等都这样的
Exaybachay 2013-11-13
  • 打赏
  • 举报
回复
要么定长 要么提前告知长度
max_min_ 2013-11-13
  • 打赏
  • 举报
回复
引用 2 楼 fyssqzh555 的回复:
[quote=引用 1 楼 max_min_ 的回复:] 定长消息头,先接消息头!消息头里赋值后面有效数据的长度! 接收端通过消息头数据长度,再接收对应长度数据!
额,版主大大确定没有好的方法判断结束了呗?那我就只能按你说的换算法来接受数据了..[/quote] 如果结束符是有效数据呢? 所以特别的字符作为结束符是不可靠的!所以还是定长比较靠谱的!
馋比劳 2013-11-13
  • 打赏
  • 举报
回复
引用 1 楼 max_min_ 的回复:
定长消息头,先接消息头!消息头里赋值后面有效数据的长度! 接收端通过消息头数据长度,再接收对应长度数据!
额,版主大大确定没有好的方法判断结束了呗?那我就只能按你说的换算法来接受数据了..
max_min_ 2013-11-13
  • 打赏
  • 举报
回复
定长消息头,先接消息头!消息头里赋值后面有效数据的长度! 接收端通过消息头数据长度,再接收对应长度数据!

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧