duanyanchong
2025-07-02 bbad0d69009871908048baa9bb1f77dfb2bf2638
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
#ifndef TCPDATATYPE_H
#define TCPDATATYPE_H
 
/*
 * 客户端与服务器交互的动作类型枚举
 * 注意:使用 enum class 避免命名冲突(C++11特性)
 */
enum class ActionType
{
    HeartCheck = 100,  // 心跳检测(保持连接活性)
    Login = 110,       // 登录请求
    Register = 120,    // 注册请求
    Msg = 200,        // 普通消息传输
    Download = 300     // 文件下载请求
};
 
/*
 * HTTP风格响应状态码(简化版)
 * 用于服务器向客户端返回操作结果状态
 */
enum class ResponseCode
{
    ResponseOK = 200,      // 成功(OK)
    BadRequest = 400,      // 错误请求(客户端请求语法错误)
    Unauthorized = 401,    // 未授权(需要身份验证)
    Forbidden = 403,       // 禁止访问(权限不足)
    NotFound = 404,        // 未找到(请求资源不存在)
    MethodNotAllowed = 405 // 方法不允许(如用GET请求POST接口)
};
 
/*
 * 通用消息头结构(所有数据包必须包含)
 * 作用:标识消息类型和基本信息
 */
struct Head
{
    ActionType type;    // 消息类型(对应ActionType枚举)
    int len;           // 整个数据包的长度(字节数)
    int version;       // 协议版本号(用于兼容性控制)
 
    // 构造函数(初始化时必须提供三个参数)
    Head(ActionType ptype, int plen, int pversion)
    {
        len = plen;
        type = ptype;
        version = pversion;
    }
};
 
/*
 * 心跳检测请求结构
 * 特点:固定类型和长度(不需要额外数据)
 */
struct HeartCheckReq
{
    ActionType type;  // 固定为ActionType::HeartCheck
    int len;         // 结构体自身大小
 
    HeartCheckReq()
    {
        type = ActionType::HeartCheck;
        len = sizeof(HeartCheckReq);  // 自动计算结构体大小
    }
};
 
/*
 * 心跳检测响应结构
 * 注意:与请求结构相同(实际可能包含服务器状态信息)
 */
struct HeartCheckRes
{
    ActionType type;  // 固定为ActionType::HeartCheck
    int len;         // 结构体自身大小
 
    HeartCheckRes()
    {
        type = ActionType::HeartCheck;
        len = sizeof(HeartCheckRes);
    }
};
 
/*
 * 用户注册请求结构
 * 组成:消息头 + 用户信息字段
 */
struct RegisterRequest
{
    Head head;        // 必须包含的消息头
    char name[64];    // 用户名(固定长度64字节)
    char password[64];// 密码(建议加密存储)
    char email[32];   // 邮箱(用于找回密码)
    char phone[32];   // 手机号(可选验证)
};
 
/*
 * 用户登录请求结构
 * 注意:比注册请求少邮箱和手机字段
 */
struct LoginRequest
{
    Head head;        // 消息头(type应为ActionType::Login)
    char name[64];    // 用户名
    char password[64];// 密码(建议加密传输)
};
 
#endif // TCPDATATYPE_H