套接字发送结构体

来源:互联网 发布:c语言画生日蛋糕 编辑:程序博客网 时间:2024/03/28 21:55

 之前一直认为套接字只能传送字符串,今天查看了一些资料,发现套接字可以发送结构体,只不过收发双方必须都知道结构体的定义,并且因为数据在网络里面传送的时候是串行的,所以发送结构体时对数据进行处理,将其串行化传送,而在接收方定义相同的结构体对这个串行数据解析即可。

方法(一)强制转换

发送方:

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));//解析过程

。。。。。。

0 0