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