李臻20242817_安全文件传输系统项目报告_第14周

安全文件传输系统项目报告(第 14 周)

1. 代码链接

Gitee 仓库地址:https://gitee.com/li-zhen1215/homework/tree/master/Secure-file

代码结构说明:

plaintext 复制代码
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

csharp 复制代码
#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。

  • 步骤

    bash 复制代码
    # 命令行转换示例
    pandoc project-report.md -o project-report.pdf --pdf-engine=xelatex
相关推荐
GUIQU.2 分钟前
【Oracle】游标
数据库·oracle
平平无奇。。。2 分钟前
Mysql库的操作和表的操作
linux·数据库·mysql
雪花凌落的盛夏5 分钟前
PostgreSQL数据库备份
数据库·postgresql
Lao A(zhou liang)的菜园7 分钟前
Oracle双平面适用场景讨论会议
数据库·平面·oracle
小小星球之旅7 分钟前
redis缓存常见问题
数据库·redis·学习·缓存
小李是个程序9 分钟前
数据库完整性
数据库·sql
GreatSQL19 分钟前
GreatSQL连接数被打满的3种紧急解决方案
数据库
安全系统学习20 分钟前
内网横向之RDP缓存利用
前端·安全·web安全·网络安全·中间件
TDengine (老段)23 分钟前
TDengine 高级功能——读缓存
大数据·数据库·缓存·时序数据库·tdengine·涛思数据·iotdb
敖行客 Allthinker24 分钟前
当 “欧洲版 Cursor” 遇上安全危机
安全