gpt4 book ai didi

c - 通过 udp 套接字发送结构

转载 作者:行者123 更新时间:2023-11-30 19:45:28 25 4
gpt4 key购买 nike

我正在编写一个基于 udp 的客户端/服务器,我想随每个数据报一起发送一个序列号,我尝试使用 #pragma 或 pack 结构通过 udp 发送该结构,但没有成功。

typedef struct {
char buf[BUF_SIZE]; //buffer size is 4096
int seq;
} pack;

当我尝试发送大小为 131094 位的文件时,我在另一端收到了大小为 135300 位的文件。我的问题是,有没有办法不用序列化就可以做到这一点?

最佳答案

n = recvfrom(sd,&pkt,sizeof(pkt),0,(struct sockaddr *)&clt,&l);

这里的n要么是-1,要么是整个接收到的数据包的大小,包括序列号字。

write(fd, pkt.buf,n)

这里n仍然是整个接收到的数据包的大小。您不会从数据包的长度中减去序列号的大小,因此每次写入都会写入额外的字节。你应该打电话

write(fd, pkt.buf, n-sizeof int);

但是在我看来,数据包还应该包含自己的长度,以应对数据不是 4096 字节倍数的情况。

关于c - 通过 udp 套接字发送结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26420787/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com