From 86be79c73dd5a8da08440c2234c9e0d9eda3a8dc Mon Sep 17 00:00:00 2001 From: Msy-msu <2200456405@qq.com> Date: Sun, 8 Jan 2023 00:31:03 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E5=9F=BA=E6=9C=AC=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TcpServer.pro.user | 463 +++++++++++++++++++++------------------------ database.cpp | 17 +- datamanager.cpp | 241 +++++++++++++---------- 3 files changed, 365 insertions(+), 356 deletions(-) diff --git a/TcpServer.pro.user b/TcpServer.pro.user index 5edea4b..8d83248 100644 --- a/TcpServer.pro.user +++ b/TcpServer.pro.user @@ -1,6 +1,6 @@ - + EnvironmentId @@ -91,96 +91,16 @@ ProjectExplorer.Project.Target.0 Desktop - Desktop Qt 6.2.3 MSVC2019 64bit - Desktop Qt 6.2.3 MSVC2019 64bit - qt.qt6.623.win64_msvc2019_64_kit - 0 + Desktop Qt 6.2.3 MinGW 64-bit + Desktop Qt 6.2.3 MinGW 64-bit + qt.qt6.623.win64_mingw_kit + 1 0 0 0 - C:\Users\25761\Desktop\build-TcpServer-Desktop_Qt_6_2_3_MSVC2019_64bit-Debug - C:/Users/25761/Desktop/build-TcpServer-Desktop_Qt_6_2_3_MSVC2019_64bit-Debug - - - true - QtProjectManager.QMakeBuildStep - false - - - - true - Qt4ProjectManager.MakeStep - - 2 - Build - Build - ProjectExplorer.BuildSteps.Build - - - - true - Qt4ProjectManager.MakeStep - clean - - 1 - Clean - Clean - ProjectExplorer.BuildSteps.Clean - - 2 - false - - false - - Debug - Qt4ProjectManager.Qt4BuildConfiguration - 2 - - - C:\Users\25761\Desktop\build-TcpServer-Desktop_Qt_6_2_3_MSVC2019_64bit-Release - C:/Users/25761/Desktop/build-TcpServer-Desktop_Qt_6_2_3_MSVC2019_64bit-Release - - - true - QtProjectManager.QMakeBuildStep - false - - - - true - Qt4ProjectManager.MakeStep - - 2 - Build - Build - ProjectExplorer.BuildSteps.Build - - - - true - Qt4ProjectManager.MakeStep - clean - - 1 - Clean - Clean - ProjectExplorer.BuildSteps.Clean - - 2 - false - - false - - Release - Qt4ProjectManager.Qt4BuildConfiguration - 0 - 0 - - - 0 - C:\Users\25761\Desktop\build-TcpServer-Desktop_Qt_6_2_3_MSVC2019_64bit-Profile - C:/Users/25761/Desktop/build-TcpServer-Desktop_Qt_6_2_3_MSVC2019_64bit-Profile + C:\Users\25761\Desktop\Error-in-"-Util.asciify("build-C:\Users\25761\Desktop\TcpServer\TcpServer-Desktop_Qt_6_2_3_MinGW_64_bit-Profile")":-SyntaxError:-Expected-token-`)' + C:/Users/25761/Desktop/Error-in-"-Util.asciify("build-C:/Users/25761/Desktop/TcpServer/TcpServer-Desktop_Qt_6_2_3_MinGW_64_bit-Profile")":-SyntaxError:-Expected-token-`)' true @@ -219,6 +139,211 @@ 0 0 + + 0 + C:\Users\25761\Desktop\build-TcpServer-Desktop_Qt_6_2_3_MinGW_64_bit-111 + C:/Users/25761/Desktop/build-TcpServer-Desktop_Qt_6_2_3_MinGW_64_bit-111 + + + true + QtProjectManager.QMakeBuildStep + false + + + + true + Qt4ProjectManager.MakeStep + + 2 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + clean + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + false + + 111 + Qt4ProjectManager.Qt4BuildConfiguration + 2 + + 2 + + + 0 + Deploy + Deploy + ProjectExplorer.BuildSteps.Deploy + + 1 + + false + ProjectExplorer.DefaultDeployConfiguration + + 1 + + true + true + true + + 2 + + Qt4ProjectManager.Qt4RunConfiguration:C:/Users/25761/Desktop/TcpServer/TcpServer.pro + C:/Users/25761/Desktop/TcpServer/TcpServer.pro + false + true + true + false + true + C:/Users/25761/Desktop/build-TcpServer-Desktop_Qt_6_2_3_MinGW_64_bit-111 + + 1 + + + + ProjectExplorer.Project.Target.1 + + Desktop + Desktop Qt 6.2.3 MSVC2019 64bit + Desktop Qt 6.2.3 MSVC2019 64bit + qt.qt6.623.win64_msvc2019_64_kit + 2 + 0 + 0 + + C:\Users\25761\Desktop\Error-in-"-Util.asciify("build-C:\Users\25761\Desktop\TcpServer\TcpServer-Desktop_Qt_6_2_3_MSVC2019_64bit-Release")":-SyntaxError:-Expected-token-`)' + C:/Users/25761/Desktop/Error-in-"-Util.asciify("build-C:/Users/25761/Desktop/TcpServer/TcpServer-Desktop_Qt_6_2_3_MSVC2019_64bit-Release")":-SyntaxError:-Expected-token-`)' + + + true + QtProjectManager.QMakeBuildStep + false + + + + true + Qt4ProjectManager.MakeStep + + 2 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + clean + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + false + + Release + Qt4ProjectManager.Qt4BuildConfiguration + 0 + 0 + + + 0 + C:\Users\25761\Desktop\Error-in-"-Util.asciify("build-C:\Users\25761\Desktop\TcpServer\TcpServer-Desktop_Qt_6_2_3_MSVC2019_64bit-Profile")":-SyntaxError:-Expected-token-`)' + C:/Users/25761/Desktop/Error-in-"-Util.asciify("build-C:/Users/25761/Desktop/TcpServer/TcpServer-Desktop_Qt_6_2_3_MSVC2019_64bit-Profile")":-SyntaxError:-Expected-token-`)' + + + true + QtProjectManager.QMakeBuildStep + false + + + + true + Qt4ProjectManager.MakeStep + + 2 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + clean + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + false + + Profile + Qt4ProjectManager.Qt4BuildConfiguration + 0 + 0 + 0 + + + 0 + C:\Users\25761\Desktop\build-TcpServer-Desktop_Qt_6_2_3_MSVC2019_64bit-111 + C:/Users/25761/Desktop/build-TcpServer-Desktop_Qt_6_2_3_MSVC2019_64bit-111 + + + true + QtProjectManager.QMakeBuildStep + false + + + + true + Qt4ProjectManager.MakeStep + + 2 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + clean + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + false + + 111 + Qt4ProjectManager.Qt4BuildConfiguration + 2 + 3 @@ -247,170 +372,6 @@ true false true - C:/Users/25761/Desktop/build-TcpServer-Desktop_Qt_6_2_3_MSVC2019_64bit-Debug - - 1 - - - - ProjectExplorer.Project.Target.1 - - Desktop - Desktop Qt 6.2.3 MinGW 64-bit - Desktop Qt 6.2.3 MinGW 64-bit - qt.qt6.623.win64_mingw_kit - 0 - 0 - 0 - - 0 - C:\Users\25761\Desktop\build-TcpServer-Desktop_Qt_6_2_3_MinGW_64_bit-Debug - C:/Users/25761/Desktop/build-TcpServer-Desktop_Qt_6_2_3_MinGW_64_bit-Debug - - - true - QtProjectManager.QMakeBuildStep - false - - - - true - Qt4ProjectManager.MakeStep - - 2 - Build - Build - ProjectExplorer.BuildSteps.Build - - - - true - Qt4ProjectManager.MakeStep - clean - - 1 - Clean - Clean - ProjectExplorer.BuildSteps.Clean - - 2 - false - - false - - Debug - Qt4ProjectManager.Qt4BuildConfiguration - 2 - - - C:\Users\25761\Desktop\build-TcpServer-Desktop_Qt_6_2_3_MinGW_64_bit-Release - C:/Users/25761/Desktop/build-TcpServer-Desktop_Qt_6_2_3_MinGW_64_bit-Release - - - true - QtProjectManager.QMakeBuildStep - false - - - - true - Qt4ProjectManager.MakeStep - - 2 - Build - Build - ProjectExplorer.BuildSteps.Build - - - - true - Qt4ProjectManager.MakeStep - clean - - 1 - Clean - Clean - ProjectExplorer.BuildSteps.Clean - - 2 - false - - false - - Release - Qt4ProjectManager.Qt4BuildConfiguration - 0 - 0 - - - 0 - C:\Users\25761\Desktop\build-TcpServer-Desktop_Qt_6_2_3_MinGW_64_bit-Profile - C:/Users/25761/Desktop/build-TcpServer-Desktop_Qt_6_2_3_MinGW_64_bit-Profile - - - true - QtProjectManager.QMakeBuildStep - false - - - - true - Qt4ProjectManager.MakeStep - - 2 - Build - Build - ProjectExplorer.BuildSteps.Build - - - - true - Qt4ProjectManager.MakeStep - clean - - 1 - Clean - Clean - ProjectExplorer.BuildSteps.Clean - - 2 - false - - false - - Profile - Qt4ProjectManager.Qt4BuildConfiguration - 0 - 0 - 0 - - 3 - - - 0 - Deploy - Deploy - ProjectExplorer.BuildSteps.Deploy - - 1 - - false - ProjectExplorer.DefaultDeployConfiguration - - 1 - - true - true - true - - 2 - - ProjectExplorer.CustomExecutableRunConfiguration - - false - true - false - true 1 diff --git a/database.cpp b/database.cpp index 48ebb76..72688d3 100644 --- a/database.cpp +++ b/database.cpp @@ -84,7 +84,7 @@ bool DataBase::insertUsr(QString name, QString pwd) //根据name查找用户 bool DataBase::findUsr(QString name) { - QString sql = QString(" from table_usr where name = :name;"); + QString sql = QString("select from table_usr where name = :name;"); //打开数据库 if(!db_.open()) { @@ -113,7 +113,7 @@ bool DataBase::findUsr(QString name) bool DataBase::Delete(QString name) { - QString sql = QString("select name from table_usr where name = :name;"); + QString sql = QString("delete from table_usr where name = :name;"); //打开数据库 if(!db_.open()) { @@ -123,8 +123,9 @@ bool DataBase::Delete(QString name) //执行删除操作 QSqlQuery query(db_); - - if (!query.exec(sql)) + query.prepare(sql); + query.bindValue(":name",QVariant(name)); + if (!query.exec()) { qDebug() << "delete" << query.lastError().text(); return false; @@ -146,15 +147,19 @@ bool DataBase::match(QString name, QString pwd) exit(-1); } - //执行插入操作 QSqlQuery query(db_); query.prepare(sql); query.bindValue(":name",QVariant(name)); - query.exec(); + if(!query.exec()) + { + qDebug() << "match fail" << db_.lastError().text(); + return false; + } //匹配密码 if(query.next()) { + qDebug() << query.value(1).toString(); if(!(pwd == query.value(1).toString())) { return false; diff --git a/datamanager.cpp b/datamanager.cpp index 50b4cf7..b442379 100644 --- a/datamanager.cpp +++ b/datamanager.cpp @@ -18,132 +18,175 @@ void DataManager::disconnect_from_cln(QTcpSocket *sock) void DataManager::recv_from_cln(QByteArray &data, QTcpSocket *sock) { - QByteArray data_decrypt; - data_decrypt = p_this->protocol->data_decrypt(data); - QJsonDocument json_data = QJsonDocument::fromJson(data_decrypt); - if (json_data["type"] == "message") + QByteArray data_decrypt = p_this->protocol->data_decrypt(data); + QList list = data_decrypt.split('\n'); + for (int i = 0; i < list.count(); i++) { - if(json_data["to_user"].toString().isEmpty()) + QJsonDocument json_data = QJsonDocument::fromJson(list[i]); + if (json_data["type"] == "message") { - for (auto &one_socket:p_this->online_socket_list) + if (json_data["to_user"].toString().isEmpty()) { - p_this->server->sendToclient(one_socket,data); - } - } - else - { - QString to_user = json_data["to_user"].toString(); - qDebug() << to_user; - for (int i = 0; i < p_this->online_name_list.length(); i++) - { - if(p_this->online_name_list.at(i) == to_user) + qDebug() << "收到群发类型的信息,将转发"; + for (auto &one_socket : p_this->online_socket_list) { - p_this->server->sendToclient(p_this->online_socket_list[i],data); - break; + if (one_socket != sock) + { + p_this->server->sendToclient(one_socket, data); + } + } + } + else + { + qDebug() << "收到私发类型的信息,将转发"; + QString to_user = json_data["to_user"].toString(); + qDebug() << to_user; + for (int i = 0; i < p_this->online_name_list.length(); i++) + { + if (p_this->online_name_list.at(i) == to_user) + { + p_this->server->sendToclient(p_this->online_socket_list[i], data); + break; + } } } } - } - else if (json_data["type"] == "file") - { - if(json_data["to_user"].toString().isEmpty()) + else if (json_data["type"] == "file") { - for (auto &one_socket:p_this->online_socket_list) + if (json_data["to_user"].toString().isEmpty()) { - p_this->server->sendToclient(one_socket,data); - } - } - else - { - QString to_user = json_data["to_user"].toString(); - qDebug() << to_user; - for (int i = 0; i < p_this->online_name_list.length(); i++) - { - if(p_this->online_name_list.at(i) == to_user) + qDebug() << "收到群发类型的文件,将转发"; + for (auto &one_socket : p_this->online_socket_list) { - p_this->server->sendToclient(p_this->online_socket_list[i],data); - break; + if (one_socket != sock) + { + p_this->server->sendToclient(one_socket, data); + } + } + } + else + { + qDebug() << "收到私发类型的文件,将转发"; + QString to_user = json_data["to_user"].toString(); + qDebug() << to_user; + for (int i = 0; i < p_this->online_name_list.length(); i++) + { + if (p_this->online_name_list.at(i) == to_user) + { + p_this->server->sendToclient(p_this->online_socket_list[i], data); + break; + } } } } - } - else if (json_data["type"] == "request") - { - if (json_data["action"] == "register") + else if (json_data["type"] == "request") { - QString username,password; - QJsonObject json = json_data["content"].toObject(); - username = json["user"].toString(); - password = json["password"].toString(); - bool result = p_this->database->insertUsr(username,password); - QByteArray data_build,data_encrypt; - data_build = p_this->protocol->data_maker(Protocol::RESPONSE,QString("register"),result); - data_encrypt = p_this->protocol->data_encrypt(data_build); - p_this->server->sendToclient(sock,data_encrypt); - } - else if (json_data["action"] == "signin") - { - QString username,password; - QJsonObject json = json_data["content"].toObject(); - username = json["user"].toString(); - password = json["password"].toString(); - bool result = p_this->database->match(username,password); - qDebug() << result; - if(result == true) + if (json_data["action"] == "register") { - p_this->online_socket_list.append(sock); - p_this->online_name_list.append(username); - + qDebug() << "收到注册类型的信息,将进行处理"; + QString username, password; + QJsonObject json = json_data["content"].toObject(); + username = json["user"].toString(); + password = json["password"].toString(); + bool result = p_this->database->insertUsr(username, password); + qDebug() << result; + if (result == true) + { + QByteArray data_build, data_encrypt; + data_build = p_this->protocol->data_maker(Protocol::RESPONSE, QString("register"), QList{"result", "true"}); + qDebug() << data_build; + data_encrypt = p_this->protocol->data_encrypt(data_build); + p_this->server->sendToclient(sock, data_encrypt); + } + else + { + QByteArray data_build, data_encrypt; + data_build = p_this->protocol->data_maker(Protocol::RESPONSE, QString("register"), QList{"result", "false"}); + qDebug() << data_build; + data_encrypt = p_this->protocol->data_encrypt(data_build); + p_this->server->sendToclient(sock, data_encrypt); + } } - QByteArray data_build,data_encrypt; - data_build = p_this->protocol->data_maker(Protocol::RESPONSE,QString("signin"),result); - data_encrypt = p_this->protocol->data_encrypt(data_build); - p_this->server->sendToclient(sock,data_encrypt); - p_this->update_namelist(sock); - } - else if (json_data["action"] == "cacellation") - { - - QString username = json_data["content"].toString(); - if(!p_this->database->Delete(username)) + else if (json_data["action"] == "signin") { + qDebug() << "收到登录类型的信息,将进行处理"; + QString username, password; + QJsonObject json = json_data["content"].toObject(); + username = json["user"].toString(); + password = json["password"].toString(); + qDebug() << username <database->match(username, password); + qDebug() << result; + if (result == true) + { + p_this->online_socket_list.append(sock); + p_this->online_name_list.append(username); + QByteArray data_build, data_encrypt; + data_build = p_this->protocol->data_maker(Protocol::RESPONSE, QString("signin"), QList{"result", "true"}); + qDebug() << data_build; + data_encrypt = p_this->protocol->data_encrypt(data_build); + p_this->server->sendToclient(sock, data_encrypt); + p_this->update_namelist(sock); + } + else + { + QByteArray data_build, data_encrypt; + data_build = p_this->protocol->data_maker(Protocol::RESPONSE, QString("signin"), QList{"result", "false"}); + qDebug() << data_build; + data_encrypt = p_this->protocol->data_encrypt(data_build); + p_this->server->sendToclient(sock, data_encrypt); + } + } + else if (json_data["action"] == "cancellation") + { + qDebug() << "收到注销类型的数据,将进行处理"; + QJsonObject json = json_data["content"].toObject(); + QString username = json["name"].toString(); + qDebug() << username; + if (!p_this->database->Delete(username)) + { + qDebug() << "用户注销失败"; + return; + } + qDebug() << "删除之前的数据" <online_name_list; + for (int i = 0; i < p_this->online_name_list.length(); i++) + { + if (p_this->online_name_list.at(i) == username) + { + qDebug() << i; + p_this->online_name_list.removeAt(i); + p_this->online_socket_list.removeAt(i); + break; + } + } + qDebug() << "删除之后的数据" << p_this->online_name_list; + p_this->update_namelist(sock); + } + else if (json_data["action"] == "update_namelist") + { + QByteArray data_build, data_encrypt; + data_build = p_this->protocol->data_maker(Protocol::ONLINEUSERS, 4, p_this->online_name_list); + data_encrypt = p_this->protocol->data_encrypt(data_build); + p_this->server->sendToclient(sock, data_encrypt); + } + else + { + qDebug() << "服务端收到未知类型的数据" << list[i]; return; } - for (int i = 0; i < p_this->online_name_list.length(); i++) - { - if(p_this->online_name_list.at(i) == username) - { - p_this->online_name_list.removeAt(i); - p_this->online_socket_list.removeAt(i); - break; - } - } - p_this->update_namelist(sock); } - else if (json_data["action"] == "update_namelist") - { - QByteArray data_build,data_encrypt; - data_build = p_this->protocol->data_maker(Protocol::ONLINEUSERS,4,p_this->online_name_list); - data_encrypt = p_this->protocol->data_encrypt(data_build); - p_this->server->sendToclient(sock,data_encrypt); - } - } - else - { - qDebug() << "服务端收到未知类型的数据"; - return; } } void DataManager::update_namelist(QTcpSocket *sock) { - QByteArray data_build,data_encrypt; - data_build = protocol->data_maker(Protocol::ONLINEUSERS,4,online_name_list); + qDebug() << "发送更新用户在线列表信息"; + QByteArray data_build, data_encrypt; + data_build = protocol->data_maker(Protocol::ONLINEUSERS, 4, online_name_list); qDebug() << online_name_list; data_encrypt = protocol->data_encrypt(data_build); - for (auto &one_socket:online_socket_list) + for (auto &one_socket : online_socket_list) { - server->sendToclient(one_socket,data_encrypt); + server->sendToclient(one_socket, data_encrypt); } } -