通过udp套接字发送结构

时间:2014-10-17 08:19:48

标签: c sockets struct udp pack

我正在编写基于udp的客户端/服务器,我想发送一个序列号以及每个数据报,我试图使用#pragma或包结构在udp上发送结构而没有运气。< / p>

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

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

1 个答案:

答案 0 :(得分:0)

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字节的倍数的情况。