TCP-socket發送結構體類型數據


UDP傳輸模式是數據報,TCP傳輸模式為字節流,字節流與數據報區別在於有邊界與無邊界。例如:TCP客戶端發送了三個數據包,開的緩存足夠大服務端一次可接收三個數據包的數據,這就是無邊界。UDP客戶端發送了三個數據包,就算開的緩存足夠大服務端一次也只能接收一個數據包,這就是有邊界。

還有就是協議會維護源地址和目的地址直到協議要求斷開連接,這就決定了TCP不能進行廣播和多播。

如何使用TCP發送結構體類型數據:

·     //使用結構體轉換成字符串發送,在服務器端直接轉為結構體  

·     /*  

·     char send_buf[1024] = "tony  2000  ";  

·     memset(send_buf,0,1024);  

·     struct msg  

·     {  

·         int cmd;  

·         int sendID;  

·         int recvID;  

·         string name;  

·         int number;  

·     };  

·     msg msg1;  

·     msg1.cmd = COMMAND;  

·     msg1.sendID = 2120100324;  

·     msg1.recvID = 2120100325;  

·     msg1.name = "Tony";  

·     msg1.number = 2000;  

·       

·   

·     //以字符串形式發送,因為TCP/IP是字節流通信  

·     //memcpy(send_buf,&msg1,sizeof(msg));  

·     //int len_send = send(Socket,send_buf,sizeof(send_buf),0);  

·     int len_send = send(Socket,(char *)&msg1,sizeof(msg),0);  

如上所示,

TCP是無邊界的字節流傳輸,所以需要將結構體轉換為字符串后在發送,最后三行用了兩種方法發送屬於結構體類型的數據,通過TCP傳輸。最后在接收方需要轉換為結構體。

紅色:  數組屬於字符串,該方法是將要發送結構體所占字節大小考到數組中,       再通過數組發送。

藍色:  將該結構體地址轉化為char* 類型的地址,目的是使該指針加1移動時 是按一個字節移動,而不是加1按該結構體大小移動,然后發送該結構 體所占字節大小。


免責聲明!

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



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