commit c1fe2597f1d3b4b21e50527e5f2f2272be066a38 Author: chenyf <1343619937@qq.com> Date: Mon Sep 9 07:27:43 2024 +0800 first_version diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d163863 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +build/ \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..9c37a84 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,54 @@ +{ + "cmake.generator": "MinGW Makefiles", + "files.associations": { + "ostream": "cpp", + "iostream": "cpp", + "qmainwindow": "cpp", + "array": "cpp", + "atomic": "cpp", + "*.tcc": "cpp", + "cctype": "cpp", + "chrono": "cpp", + "clocale": "cpp", + "cmath": "cpp", + "cstdarg": "cpp", + "cstddef": "cpp", + "cstdint": "cpp", + "cstdio": "cpp", + "cstdlib": "cpp", + "ctime": "cpp", + "cwchar": "cpp", + "cwctype": "cpp", + "deque": "cpp", + "list": "cpp", + "unordered_map": "cpp", + "vector": "cpp", + "exception": "cpp", + "algorithm": "cpp", + "functional": "cpp", + "iterator": "cpp", + "map": "cpp", + "memory": "cpp", + "memory_resource": "cpp", + "numeric": "cpp", + "optional": "cpp", + "ratio": "cpp", + "string": "cpp", + "string_view": "cpp", + "system_error": "cpp", + "tuple": "cpp", + "type_traits": "cpp", + "utility": "cpp", + "fstream": "cpp", + "initializer_list": "cpp", + "iosfwd": "cpp", + "istream": "cpp", + "limits": "cpp", + "new": "cpp", + "sstream": "cpp", + "stdexcept": "cpp", + "streambuf": "cpp", + "typeinfo": "cpp", + "variant": "cpp" + } +} \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..12e5769 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,45 @@ +cmake_minimum_required(VERSION 3.5) + +project(socket_cmd_host LANGUAGES CXX) + +set(CMAKE_INCLUDE_CURRENT_DIR ON) + +set(CMAKE_AUTOUIC ON) +set(CMAKE_AUTOMOC ON) +set(CMAKE_AUTORCC ON) + +set(CMAKE_CXX_STANDARD 11) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +# QtCreator supports the following variables for Android, which are identical to qmake Android variables. +# Check http://doc.qt.io/qt-5/deployment-android.html for more information. +# They need to be set before the find_package(Qt5 ...) call. + +#if(ANDROID) +# set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android") +# if (ANDROID_ABI STREQUAL "armeabi-v7a") +# set(ANDROID_EXTRA_LIBS +# ${CMAKE_CURRENT_SOURCE_DIR}/path/to/libcrypto.so +# ${CMAKE_CURRENT_SOURCE_DIR}/path/to/libssl.so) +# endif() +#endif() + +find_package(Qt5 COMPONENTS Widgets REQUIRED) +find_package(Qt5NetWork) +if(ANDROID) + add_library(socket_cmd_host SHARED + main.cpp + mainwindow.cpp + mainwindow.h + mainwindow.ui + ) +else() + add_executable(socket_cmd_host + main.cpp + mainwindow.cpp + mainwindow.h + mainwindow.ui + ) +endif() + +target_link_libraries(socket_cmd_host PRIVATE Qt5::Widgets Qt5::Network) diff --git a/CMakeLists.txt.user b/CMakeLists.txt.user new file mode 100644 index 0000000..0b5d3ec --- /dev/null +++ b/CMakeLists.txt.user @@ -0,0 +1,364 @@ + + + + + + EnvironmentId + {2af8b88c-e5ba-4fff-b554-68f1c16ee860} + + + ProjectExplorer.Project.ActiveTarget + 0 + + + ProjectExplorer.Project.EditorSettings + + true + false + true + + Cpp + + CppGlobal + + + + QmlJS + + QmlJSGlobal + + + 2 + UTF-8 + false + 4 + false + 80 + true + true + 1 + true + false + 0 + true + true + 0 + 8 + true + 1 + true + true + true + false + + + + ProjectExplorer.Project.PluginSettings + + + -fno-delayed-template-parsing + + true + Builtin.Questionable + + true + Builtin.DefaultTidyAndClazy + 8 + + + + true + + + + + ProjectExplorer.Project.Target.0 + + mingw-gcc + mingw-gcc + {70298f91-1f6a-4f9c-afc0-abb5d1400c4a} + 0 + 0 + 0 + + + CMAKE_BUILD_TYPE:STRING=Debug + CMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} + CMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} + CMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} + QT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} + + 2 + D:\WORK\QT\build-socket_cmd_host-mingw_gcc-Debug + + + + + all + + true + CMakeProjectManager.MakeStep + + 1 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + + + clean + + true + CMakeProjectManager.MakeStep + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Debug + CMakeProjectManager.CMakeBuildConfiguration + + + + CMAKE_BUILD_TYPE:STRING=Release + CMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} + CMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} + CMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} + QT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} + + 2 + D:\WORK\QT\build-socket_cmd_host-mingw_gcc-Release + + + + + all + + true + CMakeProjectManager.MakeStep + + 1 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + + + clean + + true + CMakeProjectManager.MakeStep + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Release + CMakeProjectManager.CMakeBuildConfiguration + + + + CMAKE_BUILD_TYPE:STRING=RelWithDebInfo + CMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} + CMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} + CMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} + QT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} + + 2 + D:\WORK\QT\build-socket_cmd_host-mingw_gcc-RelWithDebInfo + + + + + all + + true + CMakeProjectManager.MakeStep + + 1 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + + + clean + + true + CMakeProjectManager.MakeStep + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Release with Debug Information + CMakeProjectManager.CMakeBuildConfiguration + + + + CMAKE_BUILD_TYPE:STRING=MinSizeRel + CMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx} + CMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C} + CMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX} + QT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable} + + 2 + D:\WORK\QT\build-socket_cmd_host-mingw_gcc-MinSizeRel + + + + + all + + true + CMakeProjectManager.MakeStep + + 1 + Build + Build + ProjectExplorer.BuildSteps.Build + + + + + + clean + + true + CMakeProjectManager.MakeStep + + 1 + Clean + Clean + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Minimum Size Release + CMakeProjectManager.CMakeBuildConfiguration + + 4 + + + 0 + Deploy + Deploy + ProjectExplorer.BuildSteps.Deploy + + 1 + + false + ProjectExplorer.DefaultDeployConfiguration + + 1 + + + dwarf + + cpu-cycles + + + 250 + + -e + cpu-cycles + --call-graph + dwarf,4096 + -F + 250 + + -F + true + 4096 + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + kcachegrind + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + 2 + + socket_cmd_host + CMakeProjectManager.CMakeRunConfiguration.socket_cmd_host + socket_cmd_host + + false + + false + true + true + false + false + true + + C:/Users/chenyf/AppData/Local/Temp/QtCreator-gqpGWl/qtc-cmake-kVRInkbB + + 1 + + + + ProjectExplorer.Project.TargetCount + 1 + + + ProjectExplorer.Project.Updater.FileVersion + 22 + + + Version + 22 + + diff --git a/main.cpp b/main.cpp new file mode 100644 index 0000000..fd3e533 --- /dev/null +++ b/main.cpp @@ -0,0 +1,11 @@ +#include "mainwindow.h" + +#include + +int main(int argc, char *argv[]) +{ + QApplication a(argc, argv); + MainWindow w; + w.show(); + return a.exec(); +} diff --git a/mainwindow.cpp b/mainwindow.cpp new file mode 100644 index 0000000..7c477c6 --- /dev/null +++ b/mainwindow.cpp @@ -0,0 +1,64 @@ +#include "mainwindow.h" +#include "./ui_mainwindow.h" + +MainWindow::MainWindow(QWidget *parent) + : QMainWindow(parent), ui(new Ui::MainWindow) +{ + ui->setupUi(this); + ui->le_port->setText("1234"); + + connect(ui->bt_start, &QPushButton::clicked, this, &MainWindow::start_server); + connect(ui->bt_stop, &QPushButton::clicked, this, &MainWindow::stop_server); + client = nullptr; +} + +MainWindow::~MainWindow() +{ + delete ui; +} + +void MainWindow::start_server() +{ + int port = ui->le_port->text().toInt(); + if (port == 0) + { + return; + } + server.listen(QHostAddress::Any, port); + ui->lb_state->setText("启动成功"); + ui->lb_listen_port->setText(QString::number(port)); + connect(&server, &QTcpServer::newConnection, this, &MainWindow::new_connection); +} + +void MainWindow::stop_server() +{ + server.close(); + ui->lb_state->setText("已停止"); + ui->lb_listen_port->setText(""); +} +void MainWindow::new_connection() +{ + if (server.hasPendingConnections()) + { + std::cout<< "new connection" << std::endl; + if (client == nullptr) + { + client = server.nextPendingConnection(); + connect(client, &QTcpSocket::readyRead, this, &MainWindow::read_data); + ui->lb_client->setText("已连接"); + connect(client, &QTcpSocket::disconnected, this, &MainWindow::disconnected); + } + } +} +void MainWindow::disconnected() +{ + ui->lb_client->setText("已断开"); + client = nullptr; +} +void MainWindow::read_data() +{ + QTcpSocket *socket = qobject_cast(sender()); + QByteArray data = socket->readAll(); + QString str = data.data(); + ui->pte_info->append(str); +} \ No newline at end of file diff --git a/mainwindow.h b/mainwindow.h new file mode 100644 index 0000000..d454045 --- /dev/null +++ b/mainwindow.h @@ -0,0 +1,30 @@ +#ifndef MAINWINDOW_H +#define MAINWINDOW_H + +#include +#include +#include +#include +QT_BEGIN_NAMESPACE +namespace Ui { class MainWindow; } +QT_END_NAMESPACE + +class MainWindow : public QMainWindow +{ + Q_OBJECT + +public: + MainWindow(QWidget *parent = nullptr); + ~MainWindow(); +public slots: + void start_server(); + void stop_server(); + void new_connection(); + void read_data(); + void disconnected(); +private: + Ui::MainWindow *ui; + QTcpServer server; + QTcpSocket *client; +}; +#endif // MAINWINDOW_H diff --git a/mainwindow.ui b/mainwindow.ui new file mode 100644 index 0000000..d7f7c7c --- /dev/null +++ b/mainwindow.ui @@ -0,0 +1,123 @@ + + + MainWindow + + + + 0 + 0 + 800 + 596 + + + + MainWindow + + + + + + 280 + 30 + 421 + 401 + + + + + + + 20 + 20 + 241 + 161 + + + + + + + + + + Port: + + + + + + + + + + 状态: + + + + + + + + + + + + + + 关闭服务器 + + + + + + + 启动服务器 + + + + + + + 监听端口: + + + + + + + 未启动 + + + + + + + 客户端: + + + + + + + 无连接 + + + + + + + + + + 0 + 0 + 800 + 26 + + + + + + + +