TCP socket傳送結構體型別資料

2022-08-02 12:42:10 字數 1172 閱讀 7410

udp傳輸模式是資料報,

tcp傳輸模式為位元組流,位元組流與資料報區別在於有邊界與無邊界。例如:

tcp客戶端傳送了三個資料報,開的快取足夠大服務端一次可接收三個資料報的資料,這就是無邊界。

udp客戶端傳送了三個資料報,就算開的快取足夠大服務端一次也只能接收乙個資料報,這就是有邊界。

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

如何使用tcp傳送結構體型別資料:

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

·     /*  

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

·     memset(send_buf,0,1024);  

·     struct msg  

·     ;  

·     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按該結構體大小移動,然後傳送該結構 體所佔位元組大小。

TCP socket傳送結構體型別資料

udp傳輸模式是資料報,tcp傳輸模式為位元組流,位元組流與資料報區別在於有邊界與無邊界。例如 tcp客戶端傳送了三個資料報,開的快取足夠大服務端一次可接收三個資料報的資料,這就是無邊界。udp客戶端傳送了三個資料報,就算開的快取足夠大服務端一次也只能接收乙個資料報,這就是有邊界。還有就是協議會維護...

socket傳送結構體

客套話不說了 socket中的send函式可以傳送字串,不能直接傳送結構體,自己理解 結構體即記憶體中一段連續的記憶體,這樣send中可以傳送結構體指標 上 功能 客戶端傳送給服務端乙個結構體,服務端返回客戶端一字串 客戶端 client.c include include include incl...

Linux傳送結構體

linux網路通訊 linux下多客戶端聊天軟體 linux程式設計 linux socket send and recevie structure 最近在開發乙個linux下的聊天軟體,好久沒有做c語言的開發了,感覺到很多東西已經生疏了,這下又碰到用socket傳遞結構體的問題,google了一下...