1. 程式人生 > >UDP 傳送接收 struct

UDP 傳送接收 struct

利用udp傳送資料時,可能會發送不同型別的資料,多種型別資料通過一條udp報文傳送需要,因此需要建立一個結構體對需要傳送的資料進行定義。但是udp傳送的是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);