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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM