首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基于udp套接字的C发送结构

基于udp套接字的C发送结构
EN

Stack Overflow用户
提问于 2014-11-17 14:45:52
回答 2查看 547关注 1票数 1

我已经实现了udp服务器和客户端C. server (64位PC)发送包含数据包序列号的udp数据包给客户端(也是64位PC)。序列号为无符号长int类型。服务器正确读取此序列号并通过套接字发送数据包。问题是在客户端,它正确地读取所有数据包,直到他到达65 535包,然后从0开始。这是没有意义的,因为在客户端,packetis没有符号的长int类型的序列号。下面也是我的功能,在服务器端进行编码,在客户端解码,也许你会看到错误?Thx

服务器编码

代码语言:javascript
运行
复制
size_t encode(packet pack, char buf[MAX_SIZE]){


    size_t pack_len;
    unsigned char *pt = buf;

    *pt++ = (pack.tos >> 8) & 255;
    *pt++ = (pack.tos & 255);

    *pt++ = (pack.seq_num  >> 24) & 255 ;
    *pt++ = (pack.seq_num  >> 16)& 255;
    *pt++ = (pack.seq_num >> 8) & 255;
    *pt++ = (pack.seq_num & 255);

    strcpy(pt,pack.buffer);
    pt += strlen(pack.buffer)+1;
    pack_len = sizeof(pack.tos) +sizeof(pack.seq_num) + strlen(pack.buffer); 

    return pack_len;

}

客户端解码

代码语言:javascript
运行
复制
packet decode(char *buf) {

    packet pack;
    unsigned char *pt = buf;

    pack.tos = *pt++ << 8;
    pack.tos += *pt++;

    pack.seq_num = *pt++ << 24;
    pack.seq_num = *pt++ << 16;
    pack.seq_num = *pt++ << 8;
    pack.seq_num += *pt++;

    strcpy(pack.buffer, pt);
    return pack;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-17 14:52:41

看看您的客户端解码功能:它执行"pack.seq_num =“3次,然后是pack.seq_num +=,所以有效地只使用最后两个字节,这就是为什么它每65535个数据包就会溢出的原因。只有第一行应该分配给pack.seq_num,其他3行必须添加(使用+=)。

票数 1
EN

Stack Overflow用户

发布于 2014-11-17 14:52:11

decode函数中,除了最后8位外,每一行都重新分配给seq_num成员。所以这意味着你只能得到低的16位。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26975224

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档