c++ 通信发送结构体

自助开通VIP,整站资源任意下载
网络通信中发送的都是数据我们定义为结构体这样方便我们更直观的操作信息.
发送的时候我们定义一个全局的SENDBUFFER[10000]的CHAR 数组;
char sendbuffer[10000];
一 个客户端和服务端都公用的结构体
struct NetMessageHead
{
    int m_messagesize;//这个是消息长度
    int m_MainID ;//协议编号(如果是1是大厅消息,如果是2是游戏消息,如果是3是系统发送消息等等,这个可以自己写)
    int m_smallID;//2级编号
    ........;//还可以在下面自己定义其他信息.
然后游戏里面我们可以定义一个消息比如
struct GameStart
{
    int m_chaircount ;//开始人数;
    int m_paicardcout;//牌的数目
    ......//等等其他变量
}
下面就是发送的时候了
比如:
//实例化一个结构
GameStart m_gamestart;
m_gamestart.m_chaircount =4;//4个人玩游戏
m_gamestart.m_paicardcout = 13;//13张牌
 //把这个发送缓冲的地址赋给消息头
 NetMessageHead * pNetHead=(NetMessageHead *)(sendbuffer);
 pNetHead->m_messagesize= sizeof(NetMessageHead)+sizeof(GameStart);
//复制开始结构的信息到消息头地址的后面
 if (&m_gamestart!=NULL) CopyMemory(pNetHead+1,&m_gamestart,sizeof(GameStart));
使用SOCKET 开始发送sendbuffer即可;
接收端
通过SOCKET接收到信息放到一个定义好的数组中比如
char m_reciveBuf[10000];
NetMessageHead * pNetHead1=( NetMessageHead *)m_reciveBuf;
先判定如果 
pNetHead1->m_messagesize > sizeof(NetMessageHead) 那么证明这个游戏后面还有结构体
然后我们再根据pNetHead1->m_MainID 判定后面消息的类型,是属于大厅的消息,还是游戏的消息,还是其他.
如果是游戏信息,然后再根据pNetHead1->m_smallID来判定是开始信息还是结束信息,还是游戏过程中其他信息,
这里我们这个是开始信息 所以应该是
GameStart * m_game = (NetMess * )(pNetHead1+1);
m_game ->m_chaircount  应该就是我们先发送的4了,其他消息结果于此类似.
SOCKET基于IO完成端口来使用是目前主流的服务器通信架构,下一篇再总结一下IO完成端口的使用的基本思想吧.免得搞忘记求.


转载请说明出处
棋牌资源网 » c++ 通信发送结构体

发表评论

欢迎 访客 发表评论

这里有你所需要的,找专业的人做专业的事!

本站演示 联系客服