采用UDP接收的原型函数为
int recvfrom(SOCKET s,
char FAR* buff,
int len,
int flags,
struct sockaddr FAR* from,
int FAR* fromlen);
也就是用char型的进行接收,如果同一个端口会有两种类型的数据包传过来,如下
//A结构体
struct A
{
int nFrameBegin;
int id; //id=1为A
int num;
double a[MaxNum]; //num<MaxNum;
int nFrameEnd;
};
//B结构体
struct B
{
int nFrameBegin;
int id; //id=2为B;
int num;
int b[MaxNum]; //num<MaxNum
int nFrameEnd;
};
通过id来确定到底是哪种数据包。
编程时,怎么把内容解析出来?求助。
int recvfrom(SOCKET s,
char FAR* buff,
int len,
int flags,
struct sockaddr FAR* from,
int FAR* fromlen);
也就是用char型的进行接收,如果同一个端口会有两种类型的数据包传过来,如下
//A结构体
struct A
{
int nFrameBegin;
int id; //id=1为A
int num;
double a[MaxNum]; //num<MaxNum;
int nFrameEnd;
};
//B结构体
struct B
{
int nFrameBegin;
int id; //id=2为B;
int num;
int b[MaxNum]; //num<MaxNum
int nFrameEnd;
};
通过id来确定到底是哪种数据包。
编程时,怎么把内容解析出来?求助。
解决方案 »
- 恳求大侠们赐教了!!
- 怎么在对话框内显示IE浏览器呢?各位高手真诚求教
- 有没有谁深入研究过ado command
- 中间件我是否要做?
- 初学者 被逼写数据库程序 虽然简单 但还是不知如何下手 高手给点意见
- 为什么CSocket接收INT数据会错误..在线等待...
- 怎样把剪贴板上的位图存为BMP文件????急救
- 请解释一下TRACE的用法
- 请问WebBrowser有没有提供方法保存HTMLDOCUMENT?要在程序中调用ACTIVEX控件保存HTMLDOCUMENT该怎么做呀?
- 怎样用Addstring把六个变量的值存起来
- 多文档子窗口的移动范围,难道只能在框架内移动么?能不能全屏多可以移动?
- 输出这样一个图形,我该用什么方法。。。请指点!
struct DataHead
{
int type;
//...
};
发送时将DataHead结构放到Data前面发送(作一个包发送) 接收时先接收DataHead,再根据DataHead中标示接收后面的Data
首先不应该把int id;放在每个结构体内,这样区分起来很麻烦,按照你的思路:
假设接收到消息 char * pmsg = "消息体"
你需要转换两次
struct A *pa = (struct A)pmsg;
struct B *pb;
//开始判断
if (pa->id == 1 )
{
//dosomething
}
if ((pa->id !==2 )
{
pb = (struct B *)pmsg;
//dosomething
}
而加个消息头后,假设消息头定义如下
typedef struct __MSGHEAD
{
int nLen;//消息总长度
int id;//消息标识
}MSGHEAD,* LPMSGHEAD; LPMSGHEAD lpmsghead = (LPMSGHEAD)pmsg;
if (接收的长度 != lpmsghead->nLen )
//接收错误
if ( lpmsghead->id == 1 )
{
pa = (struct A *)(pmsg + sizeof(MSGHEAD));
//do something
}
else if ( lpmsghead->id == 2 )
{
pb = (struct B *)(pmsg + sizeof(MSGHEAD));
//do something
}
else
//非法消息
{
int nFrameBegin;
int id; //id=2为B;
int num;
union
{
int b[MaxNum]; //num<MaxNum
double a[MaxNum]; //num<MaxNum
}
int nFrameEnd;
};
这就已经解析完了啊。
打个广告181245517 it技术论坛
欢迎加入讨论