李臻20242817_安全文件传输系统项目报告_第14周 - 指南
安全文件传输系统项目报告(第 14 周)
1. 代码链接
Gitee 仓库地址:https://gitee.com/li-zhen1215/homework/tree/master/Secure-file
代码结构说明:
SecureFileTransfer/
├── client/ # 客户端主目录
│ ├── client # 命令行客户端可执行文件
│ ├── main.c # 命令行客户端主程序
│ ├── gui/ # Qt图形界面客户端
│ │ ├── mainwindow.h/.cpp # Qt主窗口
│ │ ├── main.cpp # Qt主程序入口
│ │ ├── SecureFileTransferClient.pro # Qt工程文件
│ │ └── ... # 其他Qt相关文件
│ ├── network/ # 客户端网络通信模块
│ │ ├── client_network.h/.c # 客户端Socket通信实现
│ └── crypto/ # 客户端加解密相关
├── server/ # 服务器端主目录
│ ├── server # 服务器端可执行文件
│ ├── main.c # 服务器主程序
│ ├── db/ # 数据库相关
│ │ ├── db.h/.c # SQLite操作
│ ├── crypto/ # 服务器端加解密相关
│ │ ├── sm2_utils.h/.c # SM2算法
│ │ ├── sm3_utils.h/.c # SM3算法
│ │ ├── sm4_utils.h/.c # SM4算法
│ ├── file_utils.h/.c # 文件操作工具
│ └── network/ # 服务器网络相关
├── common/ # 公共协议与工具
│ ├── protocol.h # 通信协议头文件
│ ├── utils.h/.c # 公共工具函数
├── doc/ # 文档
│ └── 设计说明.md
├── requirements.txt # 依赖说明
└── README.md # 项目说明
1、用户登录注册界面
- 登录界面

该界面提供了用户登录和注册的入口,用户可以通过输入用户名和密码进行登录操作,或者选择跳转到注册界面以创建新账户。
通过该界面,用户能够顺利地完成登录或注册过程,从而访问系统的其他功能。

对登录失败的用户,系统会给予提示。
- 注册界面

新用户可以在当前界面进行注册。
注册失败会有相应提示。


注册成功后便可在登录界面进行操作,并进入相关用户的主界面中。
2、主界面
用户登陆成功后,可在主界面进行文件管理,上传或下载文件。

在用户成功登录后,他们可以在主界面进行文件管理,包括上传和下载文件。
该界面提供了一个简洁直观的操作平台,用户可以通过选择本地文件并点击上传按钮,将文件安全地传输至服务器。此外,用户还可以下载已上传的文件,或删除不再需要的文件。
若文件列表未能及时更新,用户可通过点击界面右侧的刷新列表功能,以确保文件信息的实时更新。
mainwindow.cpp
#include <memory>
#include "mainwindow.h"
#include <QtCore/qbytearray.h>
#include <QtCore/qmetatype.h>
#if !defined(Q_MOC_OUTPUT_REVISION)
#error "The header file 'mainwindow.h' doesn't include <QObject>."
#elif Q_MOC_OUTPUT_REVISION != 67
#error "This file was generated using the moc from 5.15.3. It"
#error "cannot be used with the include files from this version of Qt."
#error "(The moc has changed too much.)"
#endif
QT_BEGIN_MOC_NAMESPACE
QT_WARNING_PUSH
QT_WARNING_DISABLE_DEPRECATED
struct qt_meta_stringdata_MainWindow_t {
QByteArrayData data[9]
;
char stringdata0[99]
;
}
;
#define QT_MOC_LITERAL(idx, ofs, len) \
Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \
qptrdiff(offsetof(qt_meta_stringdata_MainWindow_t, stringdata0) + ofs \
- idx *
sizeof(QByteArrayData
)
) \
)
static
const qt_meta_stringdata_MainWindow_t qt_meta_stringdata_MainWindow = {
{
QT_MOC_LITERAL(0
, 0
, 10
)
, // "MainWindow"
QT_MOC_LITERAL(1
, 11
, 12
)
, // "onSelectFile"
QT_MOC_LITERAL(2
, 24
, 0
)
, // ""
QT_MOC_LITERAL(3
, 25
, 8
)
, // "onUpload"
QT_MOC_LITERAL(4
, 34
, 10
)
, // "onDownload"
QT_MOC_LITERAL(5
, 45
, 8
)
, // "onDelete"
QT_MOC_LITERAL(6
, 54
, 9
)
, // "onRefresh"
QT_MOC_LITERAL(7
, 64
, 15
)
, // "showLoginDialog"
QT_MOC_LITERAL(8
, 80
, 18
) // "showRegisterDialog"
}
,
"MainWindow\0onSelectFile\0\0onUpload\0"
"onDownload\0onDelete\0onRefresh\0"
"showLoginDialog\0showRegisterDialog"
}
;
#undef QT_MOC_LITERAL
static
const
uint qt_meta_data_MainWindow[] = {
// content:
8
, // revision
0
, // classname
0
, 0
, // classinfo
7
, 14
, // methods
0
, 0
, // properties
0
, 0
, // enums/sets
0
, 0
, // constructors
0
, // flags
0
, // signalCount
// slots: name, argc, parameters, tag, flags
1
, 0
, 49
, 2
, 0x08 /* Private */
,
3
, 0
, 50
, 2
, 0x08 /* Private */
,
4
, 0
, 51
, 2
, 0x08 /* Private */
,
5
, 0
, 52
, 2
, 0x08 /* Private */
,
6
, 0
, 53
, 2
, 0x08 /* Private */
,
7
, 0
, 54
, 2
, 0x08 /* Private */
,
8
, 0
, 55
, 2
, 0x08 /* Private */
,
// slots: parameters
QMetaType::Void,
QMetaType::Void,
QMetaType::Void,
QMetaType::Void,
QMetaType::Void,
QMetaType::Void,
QMetaType::Void,
0 // eod
}
;
void MainWindow::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id,
void **_a)
{
if (_c == QMetaObject::InvokeMetaMethod) {
auto *_t = static_cast<MainWindow *>
(_o)
;
(
void
)_t;
switch (_id) {
case 0: _t->
onSelectFile(
)
;
break
;
case 1: _t->
onUpload(
)
;
break
;
case 2: _t->
onDownload(
)
;
break
;
case 3: _t->
onDelete(
)
;
break
;
case 4: _t->
onRefresh(
)
;
break
;
case 5: _t->
showLoginDialog(
)
;
break
;
case 6: _t->
showRegisterDialog(
)
;
break
;
default:
;
}
}
(
void
)_a;
}
QT_INIT_METAOBJECT const QMetaObject MainWindow::staticMetaObject = {
{
QMetaObject::SuperData::link<QMainWindow::staticMetaObject>(
)
,
qt_meta_stringdata_MainWindow.data,
qt_meta_data_MainWindow,
qt_static_metacall,
nullptr,
nullptr
}
}
;
const QMetaObject *MainWindow::metaObject(
)
const
{
return QObject::d_ptr->
metaObject ? QObject::d_ptr->
dynamicMetaObject(
) : &staticMetaObject;
}
void *MainWindow::qt_metacast(
const
char *_clname)
{
if (!_clname)
return nullptr;
if (!strcmp(_clname, qt_meta_stringdata_MainWindow.stringdata0)
)
return static_cast<
void*>
(
this
)
;
return QMainWindow::qt_metacast(_clname)
;
}
int MainWindow::qt_metacall(QMetaObject::Call _c, int _id,
void **_a)
{
_id = QMainWindow::qt_metacall(_c, _id, _a)
;
if (_id <
0
)
return _id;
if (_c == QMetaObject::InvokeMetaMethod) {
if (_id <
7
)
qt_static_metacall(
this
, _c, _id, _a)
;
_id -= 7
;
}
else
if (_c == QMetaObject::RegisterMethodArgumentMetaType) {
if (_id <
7
)
*reinterpret_cast<
int*>
(_a[0]
) = -1
;
_id -= 7
;
}
return _id;
}
QT_WARNING_POP
QT_END_MOC_NAMESPACE


3、遇到的问题
问题1:gm库在项目中无法使用
- 现象:在QT程序中,无法识别gm相关的头文件
- 原因:gm安装的时候路径安装随意,配置环境路径的时候操作不当,导致混乱
- 解决:卸载当前系统中和gm相关的所有环境,清空相关的系统环境变量,再重新下载gm库。安装到正确的路径下并配置环境变量。
问题2:程序在运行过程中有时会崩溃
- 现象:在运行某一个功能时会突然卡死并弹出提示
- 原因:Ubuntu虚拟机资源不足
- 解决:退出当前环境并分配更多资源
在虚拟机设置中分配内存资源,然后启动Ubuntu进入系统管理界面

将扩展的内存分配到当前文件夹中,并选择Apply,此时才能正常运行Ubuntu,否则会卡死。
4. 提交报告文档要求
Markdown 文档
- 本报告使用 Markdown 编写,文件名为
姓名学号_项目名称_第 XX 周.md。 - 包含代码块、图片链接、列表等标准语法。
转换为 PDF
- 工具:使用 VS Code 插件 Markdown PDF 或在线工具 Pandoc。
- 步骤:
# 命令行转换示例 pandoc project-report.md -o project-report.pdf --pdf-engine=xelatex

浙公网安备 33010602011771号