之前一直认为套接字只能传送字符串,今天查看了一些资料,发现套接字可以发送结构体,只不过收发双方必须都知道结构体的定义,并且因为数据在网络里面传送的时候是串行的,所以发送结构体时对数据进行处理,将其串行化传送,而在接收方定义相同的结构体对这个串行数据解析即可。
方法(一)强制转换
发送方:
struct message
{
int type;
char data[1000];
};
。。。。。。
struct message msg;
。。。。。。
sendto(clt_sockfd,(void *)&msg,sizeof(struct message),0,&srv_addr,sizeof(struct sockaddr_in));
。。。。。。
接收方:
struct message
{
int type;
char data[1000];
};
。。。。。。
struct message msg;
。。。。。。
recvfrom(srv_sockfd,(void *)&msg,sizeof(struct message),0,&clt_addr,&len);
。。。。。。
方法(二)转化解析
发送方:
struct message
{
int type;
char data[1000];
};
。。。。。。
struct message msg;
char msg_buf[1024];
。。。。。。
memcpy(msg_buf,&msg,sizeof(msg));//串行化
。。。。。。
sendto(clt_sockfd,msg_buf,sizeof(struct message),0,&srv_addr,sizeof(struct sockaddr_in));
。。。。。。
接收方:
struct message
{
int type;
char data[1000];
};
。。。。。。
struct message msg;
char msg_buf[1024];
。。。。。。
recvfrom(srv_sockfd,msg_buf,sizeof(struct message),0,&clt_addr,&len);
memcpy(&msg,msg_buf,sizeof(struct message));//解析过程
。。。。。。