zoukankan      html  css  js  c++  java
  • C++ socket 传输不同类型数据的四种方式

    使用socket传输组织好的不同类型数据,有四种不同的方式(我知道的嘿嘿):

    a. 结构体

    b. Json序列化

    c. 类对象

    d. protobuf

    下面逐一整理一下,方便以后进行项目开发。

    1. 使用结构体

       假设需要传送的结构体如下:

    struct person
    {
       char name[20];     // 注意:CPU访问内存的时候,对访问地址有对齐的要求,一般为2的幂次方。所以,有的数据被填充,以满足对齐要求。
       int age;
       float high;
    };

      可在发送数据的地方对数据进行处理,将其转换成一个字符串进行传送,而在接受方定义相同的结构体对这个字符串进行解析即可。

      发送方代码:

    char temp[100];    //传送的字符串
    struct person p1; //声明一个需要传送的结构体
    //以下是结构体的初始化信息
    p1.age = 10;
    p1.high = 1.80f;
    strcpy(p1.name,"zhangsan",sizeof(p1.name));
    memset(temp,0,sizeof(temp));         // 对该内存段进行清
    memcpy(temp,&p1,sizeof(person));     // 把这个结构体中的信息从内存中读入到字符串temp中
    //接下来传送temp这个字符串就可以了 
    send(sock,temp,sizeof(person),0);

      或者

    struct person p1; //声明一个需要传送的结构体
    p1.age = 10;
    p1.high = 1.80f;
    strcpy(p1.name,"zhangsan",sizeof(p1.name));
     
    send(sock,(char*)&p1,sizeof(person),0);

      接收方代码:

      同样需要定义字符串和相同的结构体对象

    char temp[100];    
    struct person p2;  
    memset(temp, 0, sizeof(temp)); 
    
    recv(clientSocket, temp, 101, 0);
    memcpy(&p2,temp,sizeof(person));  
    //或者
    recv(clientSocket, (char*)&p2, sizeof(person),0);
    

    2. 使用Json序列化

       有时间写

    3. 使用类对象

       有时间写

    4. protobuf

  • 相关阅读:
    NOP(4) default
    NOP(三) ASP.NET Application Life Cycle
    About the IoC
    开园庆祝!
    js 添加/删除数组开头/结尾元素
    JavaScript String.prototype.slice()
    JavaScript Array.prototype.splice()方法的使用
    js Map
    js Set
    Bruteforce Algorithm [HDU 3221]
  • 原文地址:https://www.cnblogs.com/lvchaoshun/p/6535992.html
Copyright © 2011-2022 走看看