C++ socket 傳輸不同類型資料的四種方式

來源:互聯網
上載者:User

標籤:填充   person   地方   strong   socket   size   時間   發送   項目   

使用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

 

C++ socket 傳輸不同類型資料的四種方式

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.