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了一下...