2014-10-17 83 views
-1

我正在写一个基于udp的客户端/服务器,我想发送一个序列号以及每个数据报,我试图通过udp使用#pragma或pack结构发送结构没有运气。通过udp套接字发送一个结构

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

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

+1

这是完全可能的,即使潜在的不明智,你需要给我们更多的代码和更多的信息来帮助你。 – Joe 2014-10-17 08:21:00

+0

[从结构发送数据,套接字编程]的可能的重复(http://stackoverflow.com/questions/20000257/sending-data-from-a-struct-socket-programming) – SSC 2014-10-17 08:29:27

+2

是的,这完全是可能的 - 如果有这是发送/接收代码中的问题。 – Useless 2014-10-17 08:34:29

回答

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个字节的整数倍。

+0

谢谢我改变了这一点,但仍然没有解决问题 – TicTac 2014-10-17 10:03:37