標籤:填充 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 傳輸不同類型資料的四種方式