在網路通訊過程中往往涉及一些有關聯的引數傳遞,例如陣列,結構體之類的。對於結構體其實方法挺簡單,由於結構體物件在記憶體中分配的空間都是連續的,所以可以將整個結構體直接轉化成字串傳送,到了接收方再將這個字串還原成結構體就大功告成了。 首先,我們建立一個結構體。 structUsrData{ charusr_id[16]; charusr_pwd[16]; charusr_nickname[16]; }; 當然,這個結構體在傳送方與接收方都必須宣告。 接下來建立物件並初始化,然後傳送。 UsrDatasendUser; memcpy(sendUser.usr_id,“100001”,sizeof(“100001”)); memcpy(sendUser.usr_pwd,“123456”,sizeof(“123456”)); memcpy(sendUser.usr_nickname,“Rock”,sizeof(“Rock”)); send(m_socket,(char*)&sendUser,sizeof(UsrData),0); 這樣傳送方就已經將這個mUser物件以字串的形式傳送出去了。 最後在接收方做接收。 charbuffer[1024]; UsrDatarecvUser; recv(m_socket,buffer,sizeof(buffer),0); memcpy(&recvUser,buffer,sizeof(buffer)); 這樣得到的recvUser物件裡的資料與sendUser相同了。具體原因其實很簡單,就是因為結構體物件的記憶體區域連續,同時每個成員的區塊大小都分配好了,當接收完自己的區塊,其實自己的資料已經接收完成。
在網路通訊過程中往往涉及一些有關聯的引數傳遞,例如陣列,結構體之類的。對於結構體其實方法挺簡單,由於結構體物件在記憶體中分配的空間都是連續的,所以可以將整個結構體直接轉化成字串傳送,到了接收方再將這個字串還原成結構體就大功告成了。 首先,我們建立一個結構體。 structUsrData{ charusr_id[16]; charusr_pwd[16]; charusr_nickname[16]; }; 當然,這個結構體在傳送方與接收方都必須宣告。 接下來建立物件並初始化,然後傳送。 UsrDatasendUser; memcpy(sendUser.usr_id,“100001”,sizeof(“100001”)); memcpy(sendUser.usr_pwd,“123456”,sizeof(“123456”)); memcpy(sendUser.usr_nickname,“Rock”,sizeof(“Rock”)); send(m_socket,(char*)&sendUser,sizeof(UsrData),0); 這樣傳送方就已經將這個mUser物件以字串的形式傳送出去了。 最後在接收方做接收。 charbuffer[1024]; UsrDatarecvUser; recv(m_socket,buffer,sizeof(buffer),0); memcpy(&recvUser,buffer,sizeof(buffer)); 這樣得到的recvUser物件裡的資料與sendUser相同了。具體原因其實很簡單,就是因為結構體物件的記憶體區域連續,同時每個成員的區塊大小都分配好了,當接收完自己的區塊,其實自己的資料已經接收完成。