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<Stu_Info> 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<Stu_Info> resolveData;
	Stu_Info* Student=new Stu_Info();
	//计算解析多少组数据
	int nCount=count/sizeof(Stu_Info);   // 计算buf 中共有多少组数据
	for(int i=0;i<nCount;i++)
	{
		memcpy(Student,buf+i*sizeof(Stu_Info),sizeof(Stu_Info));
		resolveData.push_back(*Student);
	}

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









 

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值