您的位置 首页 解答

一个简略的SOCKET程序的数据包结构和封解包函数

练习写套接字通信程序时候写的一段代码,本来想写个聊天室但写来写去进度卡在界面上接节下来都是通信部分的代码因为只是试验用所以都是用C

操练写套接字通讯程序时分写的一段代码,本来想写个聊天室但写来写去进展卡在界面上接节下来都是通讯部分的代码

由于仅仅实验用所以都是用C写的,等界面部分完工后会用类来封装一下
由于自己E文很烂所以变量和函数的命名是具有中国特色的,求了解.不过我注释的很详细了
谨以此文留念我那坑爹的编程自学生计………………….

#include “stdio.h”
#include
//////////////////////////////数据包接构//////////////////////////////////////
//数据包类型CTOS为客户端运用的数据包,STOC为服务端运用的数据包
#define CTOS 1
#define STOC 2
//数据包存储管道每个包最大为2000字节,其间数据载荷为最大1800字节,其他藏着扩展数据包头
struct SJGD {
BYTE sjgd[2000]; //数据缓冲区
DWORD sjcd; //数据长度
};
//数据包头巨细为8字节
struct MSG_TOU {
DWORD lxid; //数据包类型
DWORD sxid; //数据包次序标号
DWORD sjbcd; //数据包长度
};
//服务端-》客户端包
struct MSG_STOC {
DWORD cmd; //指令标识
DWORD sjbcd; //整个MSG_STOC数据包缓冲区的长度
BYTE shuju[1000]; //附加数据缓冲区
};
//客户端-》服务器包
struct MSG_CTOS {
DWORDcmd; //指令标识
DWORD sjbcd; //整个MSG_CTOS数据包缓冲区的长度
BYTE shuju[1800]; //附加数据缓冲区
};
//共用体
union MSG_DATA {
struct MSG_STOC msg_stoc;
struct MSG_CTOS msg_ctos;
};
//完好数据包
struct SJB {
struct MSG_TOU tou; //数据包头
unionMSG_DATA data; //数据缓冲区
};
/////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////
//封包函数第一个参数为数据包类型,第二个为指令标识,这是数据包的要点远控指令会转换成数字在这里传输
//第三个为数据包次序标号,第四个参数为附加数据缓冲区,第五个参数为打包数据缓冲区
//作用是把数据填充成一个规范的远控数据包为下面的发包做准备
int Fengbao(DWORD lxid,DWORD cmd,DWORD sxid,struct SJGD*sjgd,struct SJB*sjb)
{
sjb->tou.lxid=lxid; //填充数据包类型
sjb->tou.sxid=sxid; //填充数据包次序标号
if(lxid==CTOS)
{
sjb->data.msg_ctos.cmd=cmd; //填充指令标识
MoveMemory(sjb->data.msg_ctos.shuju,sjgd->sjgd,sjgd->sjcd); //填充附加数据
sjb->data.msg_ctos.sjbcd=sjgd->sjcd; //填充整个附加数据缓冲区的长度
}
if(lxid==STOC)
{
sjb->data.msg_stoc.cmd=cmd; //填充指令标识
MoveMemory(sjb->data.msg_stoc.shuju,sjgd->sjgd,sjgd->sjcd); //填充附加数据
sjb->data.msg_stoc.sjbcd=sjgd->sjcd; //填充整个附加数据缓冲区的长度
}
sjb->tou.sjbcd=20+sjgd->sjcd; //填充数据包长度
if((lxid!=CTOS)&&(lxid!=STOC)) return 0;
return 1;
}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/changshang/jieda/317247.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部