TCP聊天室02 通信协议数据包的设计

本文详细探讨了TCP聊天室中通信协议数据包的设计,通过Msg.h和Msg.cpp文件的实现,阐述了如何确保消息的正确传输与解析,以实现稳定可靠的网络通信。

//Msg.h

#pragma once
#include <windows.h>

#pragma comment(lib,"Ws2_32.lib")
//********************************************************************
//Part1:消息结构体定义
//取结构体某个字段的偏移量
//思路:将址址0x00000000开始的地址看作是TYPE结构体对象
//然后再取出指定的字段的地址,即是偏移量
#define OFFSET(Struct, Member) ((size_t) &((Struct*)0)->Member)

#define CMD_LOGIN_REQUEST		0X10	//客户端请求登录	
#define CMD_LOGIN_RESPONSE		0X20//服务器反馈登录
#define CMD_MSG_TO_SERVER		0X30//客户端上传聊天信息
#define CMD_MSG_TO_CLIENT		0X40//服务器分发聊天信息
#define	CMD_LINK_CHECK				0X50//服务器隔一段时间进行链路检测

typedef struct SMsgHdr{//数据包头部,所有的数据包都以 SMsgHdr 开头
	int iCmdType;//命令ID
	int iPkgLen;//整个数据包长度 = 数据包头部 + 数据包体
}SMSGHDR, *PSMSGHDR;

typedef struct SMsgLogin{//登录数据包(客户端->服务器端)
	TCHAR szUser[32];//用户名
	TCHAR szPwd[32];//账号
}SMSGLOGIN, *PSMSGLOGIN;

typedef struct SMsgResp{//登录回应数据包(服务器端->客户端)
	int iResult;//登录结构:1=成功,0=用户名或密码错误
}SMSGRESP, *PSMSGRESP;

typedef struct SMsg2Server{//聊天语句(客户端->服务器端):不等长数据包
	int iContent;//后面内容字段的长度
	TCHAR szContent[256];//内容,长度由iContent指定
}SMSG2SERVER, *PSMSG2SERVER;

typedef struct SMsg2Client{//聊天语句(服务器端->客户端):不等长数据包
	int iContent;//后面内容字段的长度
	TCHAR szSender[32];//消息发送者
	TCHAR szContent[256];//内容,不等长,长度由nLength指定
}SMSG2CLIENT, *PSMSG2CLIENT;

typedef struct SMsgPkg{//数据包定义方式:每个数据包以MSGHEAD + MSGXXX组成
	SMSGHDR stMsgHdr;//Msg Head
	union{
		SMSGLOGIN stMsgLogin;
		SMSGRESP stMsgResp;
		SMSG2SERVER stMsg2Server;
		SMSG2CLIENT stMsg2Client;
	};//Msg Body
}SMSGPKG, *PSMSGPKG;
//***********************************************************************************
//Part2:消息队列设计(先进先出)
#include <strsafe.h>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值