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

标签 c sockets struct udp pack

我正在编写一个基于 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/

相关文章:

c++ - 发送和接收问题

c - 将链表节点插入升序单链表GCC错误: dereferencing pointer to incomplete type

c - 读取二进制文件C编程

c++ - 套接字:我的 select() 函数逻辑具有未定义的行为

c++ - 数组结构从 C++ 到 C 的类型转换

c++ - 在结构体中使用 union 的目的是什么?

c - 头文件中的 typedef 结构体 c 文件中的结构体定义

c - 查询将用于连接到某个目标的接口(interface)的 IP

c - 偶尔出现 C 错误

sockets - Unix域套接字原理。它是如何工作的?