UDP 傳送接收 struct
阿新 • • 發佈:2019-02-08
利用udp傳送資料時,可能會發送不同型別的資料,多種型別資料通過一條udp報文傳送需要,因此需要建立一個結構體對需要傳送的資料進行定義。但是udp傳送的是char型引數,因此需要將結構體轉換為char型。
傳送時進行強制轉換:
接收方要定義和傳送方完全一致的結構體,並進行char到結構體的逆轉換才能正確接收資料
結構體和char轉換有很多種方法,每種方法所使用的條件也不同,一般來說,對於定長的結構體來說比較簡單,變長的結構體的轉換較為複雜。
在此介紹定長結構體的轉換與傳送的簡單方法,當然應用還需根據具體需求進行修改。
首先定義了一個簡單的結構體:
struct DATA{
char msg[50];
int num;
double socre;
};
定義變數 初始化
DATA buf ={"Hello everybody!",1,1.2};
傳送時進行強制轉換:
sendto(sockClient,(char*)&buf,sizeof(DATA)+1,0,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
接收方要定義和傳送方完全一致的結構體,並進行char到結構體的逆轉換才能正確接收資料
char recvBuf[100]={0};
recvfrom(sockSrv,recvBuf,100,0,(SOCKADDR*)&addrClient,&len);
DATA data;
memcpy(&data,recvBuf,sizeof(rec_udp)+1);
printf_s("%s%d%f\n",rec_udp.msg,rec_udp.num,rec_udp.socre);