UDP通信发送数据的问题

首先我们来看一下发送数据的函数的参数设置

int sendto (
SOCKET s,                           //套接字描述符
const char *buf,                    //要传输的数据
int len,                            //数据长度
int flags,                          //指定调用方式
const struct sockaddr *to,          //目标套接字地址
int tolen );                        //地址大小

这里我主要说一下,当发送的数据是一个结构体的向量时,我们应该如何发送数据。

typedef struct _stu_info
{	
	char name[9];
	int num;
	...
}Stu_Info;
vector Student;
假设我们在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中的数据信息进行解析

        vector resolveData;
	Stu_Info* Student=new Stu_Info();
	//计算解析多少组数据
	int nCount=count/sizeof(Stu_Info);   // 计算buf 中共有多少组数据
	for(int i=0;i

以上就是对结构体向量数据的UDP发送和接收,以及解析接收的数据。









 

你可能感兴趣的:(C++)