FTP文件管理项目(本地云)项目日报 测试端(六)不定长包

1.今日任务

包的收发
完成情况:完成一半

2.包的协议

#ifndef I_PACKET_PUBLIC_H
#define I_PACKET_PUBLIC_H

#include
#include

using namespace std;

#define MAX_LEN 256

/接入层数据包头/

typedef struct packet_header_st
{
int fd;//用于前后端通信即目标客户端fd(服务器用到)
int funcId; // 功能号
//登录包0x01,注册包0x02,找回密码0x03,修改密码0x04

    //客户端获取文件列表0x11,上传文件0x12,下载文件0x13,共享文件0x14
    //心跳0x21

int optid; // 操作码:请求0x00 和 应答0x01

int usrlenth;// 包体的长度
int packet_seq; //包序号
int packet_sum; //包总数

char srcAddr[6]; //预留
char dstAddr[6]; //预留

int syn; // 判断包头是否正确 0x04

}packet_header_t;

/接入层数据包尾/

typedef struct packet_tali_st//包尾,用来验证数据包的完整性
{
int pack_tail;//设置为0x05
}packet_tali_t;

/数据包报文整体/

typedef struct packet_all_st
{
packet_header_t head;
char body[packet_header_t::usrlenth];
packet_tali_st tail;
//unsigned len; //要发送的数据有效长度
}packet_all_st;

/业务层数据包体/

//客户端登录请求包
typedef struct login
{
int id;
char psw[10]; //密码
}Login_t;

//登录应答包
typedef struct res_login_st
{
int login_ret; //登录结果: 1-登录成功,0-登录失败
int dir_id; //初始文件列表id
}res_login_t;

//客户端注册请求包
typedef struct Register
{
int id; //账号
char tel[12]; //11位手机号
char psw[10]; //密码
}Register_t;

//注册应答包
typedef struct res_register_st
{
int register_ret; //注册结果: 0-注册成功,1-注册失败
}res_register_t;

//客户端修改密码请求包
typedef struct Change_PWD
{
int id; //账号
char psw[10]; //密码
}c_pwd_t;

//改密码应答包
typedef struct res_changepwd_st
{
int change_ret; //改密码结果: 0-改密码成功,1-改密码失败
}res_cpwd_t;

//找回密码请求包
typedef struct findpwd
{
int id;
char tel[12];
}F_Pwd_t;

//找回密码应答包
typedef struct res_findpwd_st
{
int find_ret; //找回结果: 0-找回成功,1-找回失败
char pwd[20]; //密码
}res_fpwd_t;

//销户请求包
typedef struct deluser
{
int id;
int pwd;
}D_user_t;

/文件相关******/

//上传文件请求包
typedef struct UpFile
{
int user_id;
int dir_id;
int mode; //文件权限位
int pwd;
char *file_name;
}UpFile_t;

//下载文件请求包
typedef struct Download_File
{
int user_id; //用户ID
int pwd;
char* file_name; //文件id
}Download_t;

//权限修改
typedef struct Cmode
{
int id;
int pwd;
int mode;
char* file_name;
}C_mode_t;

//新建目录
typedef struct AddFileList
{
int id;
int pwd;
int father_dir; //挂载在哪一级目录底下
char* dirname;
}

//修改文件目录
typedef struct CFileList
{
int id;
int pwd;
int old_dir;
int new_dir;
char* file_name;
}C_filelist_t;

//删除文件
typedef struct delfile
{
int id;
int pwd;
char *file_name;
}D_file_t;

//删除目录
typedef struct dellist
{
int id;
int pwd;
int dir_id
}D_list_t;

//文件、目录总应答
typedef res_fl
{
int stata; //0成1败
}res_fl_t;

//文件列表请求包
typedef struct File_List
{
int user_id; //用户ID
int pwd;
int dir_id; //目录id
}FileList_t;

//文件列表应答包
typedef struct Res_VideoList
{
char V[800];
}res_filelist;

#endif // PACKET_BASE_H

3.遇到问题

在这里插入图片描述
协议中的黄色部分如果这么写,会出现数组边缘并非整数的报错,这是一位usrlenth是一个变量
这时候可以改为char *body;
因为是我们规定的是不定长包,所以要判断一下包头,包尾,和包体长度
在这里插入图片描述
登陆请求包的压缩
在这里插入图片描述

推荐:关于本次项目不定长包写的不错的文章(小组同学写的文章)

FTP文件管理项目(本地云)项目日报(关于不定长包的测试)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值