UDP通訊傳送資料的問題

2021-07-26 05:44:19 字數 1516 閱讀 2962

首先我們來看一下傳送資料的函式的引數設定

int sendto (

socket s, //套接字描述符

const char *buf, //要傳輸的資料

int len, //資料長度

int flags, //指定呼叫方式

const struct sockaddr *to, //目標套接字位址

int tolen ); //位址大小

這裡我主要說一下,當傳送的資料是乙個結構體的向量時,我們應該如何傳送資料。

typedef struct _stu_info

stu_info;

vectorstudent;

假設我們在student這個向量中存了很多組資料,現在我們要做的就是將student中存放的資料同過sendto函式傳送出去,下面是傳送資料的**。

sendto(m_sendsock, (char*)&student[0], student.size()*sizeof(stu_info), 0, (sockaddr*)&m_sendaddr, naddrlen)

要傳輸的資料是char*型別的,這裡我們把向量直接強制型別轉換為char*,即(char*)&student[0]。至此我們的資料傳送成功。

資料傳送成功了,接收端我們對資料也要做乙個處理。

接收udp資料的函式recvfrom

int recvfrom (

socket s, //套接字描述符

char *buf, //傳入資料的緩衝區

int len, //接收資料的長度

int flags, //指定呼叫方式

struct sockaddr *from, //接收套接字位址

int *fromlen ); //位址大小

接收資料的語句

count = recvfrom(m_recvsock, buf, 1000, 0, (sockaddr*)&(m_recvaddr), &naddrlen)
對buf中的資料資訊進行解析

vectorresolvedata;

stu_info* student=new stu_info();

//計算解析多少組資料

int ncount=count/sizeof(stu_info); // 計算buf 中共有多少組資料

for(int i=0;i

UDP傳送資料測試

乙個合作夥伴說udp傳送資料,a ip 192.168.1.100 子網掩碼255.255.255.0 網段能發資料到b網段,但b ip 192.168.2.100 子網掩碼255.255.255.0 網段不能發資料到a網段,說法是跨路由的情況下,資料只能從下層住上層發,而不能由上層住下層發。我覺得...

UDP通訊 聊天示例(接收端 傳送端)

1 傳送send 2 接收端receive 3 接收方獲取ip和埠號 4 傳送端 實現 public static void main string args throws exception5 接收端 實現 public static void main string args throws ex...

C 中UDP資料的傳送 接收

visual c udp資料的傳送 接收包使用的主要類及其用法 用visual c udp協議的實現,最為常用,也是最為關鍵的類就是udpclient,udpclient位於命名空間system.net.sockets中,visual c udp資料報的傳送 接收都是通過udpclient類的 表0...