使用recvfrom()和sendto()发送结构

Bis*_*Das 3 c sockets struct network-programming sendto

我使用的是C语言,它是服务器和客户端的通用平台.

我有一个特定类型的结构,我想从服务器发送到客户端.

例如

服务器代码

 //necessary declarations

struct hostent *hp;

hp=gethostbyname("www.google.com");

sendto(sockDes,&hp,sizeof(hp),0,(struct sockaddr *)&cli_addr,sizeof(cli_addr));
Run Code Online (Sandbox Code Playgroud)

客户代码

struct hostent *hp;

msg=recvfrom(mysock,&hp,sizeof(hp),0,(struct sockaddr)&serv_addr,&size_len);
Run Code Online (Sandbox Code Playgroud)

所以,基本上我想从服务器向客户端发送一个结构.但是从上面的代码中我得到了分段错误,我不确定这种结构转移是否可行.有什么出路吗?

Pet*_*osB 6

首先,您必须使用malloc()以便为struct hostent分配内存.你可以通过sendto()/ recvfrom()传递一个结构,但由于struct hostent包含指针,这个结构的成员只要被转移到另一端就没有意义.

  • 这是正确的,通常就是这种情况.除非你非常小心,否则你真的不希望通过网络传输除字符或整数之外的任何内容.当您传输整数时,请务必使用htonl/htons/ntohl/ntohs系列函数将它们转换为网络字节顺序. (2认同)