TCP/IP 中多种不同数据类型的传输--使用结构体

这两天在弄TCP/IP通信,原本直接用字节一个一个自己组装并且转换格式,麻烦不说更容易出错。因此看到有人介绍这种方法,我试了一下发现确实很好;因此记录下来,方便下次查阅!!!
假设需要传送的结构体如下:

typedef struct Data {
    int list[10];//数据
    long long currentTime;//当前时间戳
}Data;

思想

TCP是无边界的字节流传输,所以需要将结构体转换为字符串后在发送,在发送数据的地方对数据进行处理,将其转换成一个字符串/结构体进行传送,而在接受方定义相同的结构体对这个字符串或者结构体进行解析即可。

发送方

代码如下:

int list[10] = { 300,300,330,300,330,300,330,300,330,300 };
char buffer[BUFFER_SIZE];//传送的字符串
struct Data data;//声明一个需要传送的结构体
for (int i = 0; i < 10; i++) {
                data.list[i] = list[i];
            }
 data.currentTime = GetTickCount();
cout << "当前时间 :" << data.currentTime << endl;
memcpy(buffer, &data, sizeof(Data)); //把这个结构体中的信息从内存中读入到字符串buffer中 
return_info = send(s_Host, buffer, sizeof(Data), 0); 

接收方

代码如下:

//同样需要定义字符串和相同的结构体对象 
char buffer[100]; //传送的字符串 
struct Data data;//声明一个存放接收信息的结构体 
memset(buffer, 0, sizeof(buffer)); //清内存
memset(&data, 0, sizeof(data));
//下面是接收字符串的代码   
//第一个参数指客户端(另一端,绑定的是客户端的IP地址和端口)套接字描述符;第二个参数指明一个缓冲区,
//该缓冲区用来存放recv函数接收到的数据;第三个参数指明buf的长度;第四个参数一般置0。
err_code = recv(sClient, buffer, sizeof(buffer), 0);
//下面对字符串信息进行还原,将其变成我们的结构体数据 
memcpy(&data, buffer, sizeof(data)); //data发送到了这边的data
//输出显示收到的数据是否正确
for (int i = 0; i < 10; i++)
{
    cout << data.list[i] << " ";
}
cout << endl;
cout << data.currentTime << endl;
  • 9
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值