Переиспользуемые сетевые утилиты для Qt 6 с современным C++17.
- Потокобезопасное логирование в файл (
std::mutex) - Автоматическая генерация уникальных имён файлов с таймстемпами
- Интеграция с Qt UI через сигналы
- RAII-управление ресурсами
- Полная реализация FTP-протокола с нуля (RFC 959)
- Архитектура State Machine с 10+ состояниями
- Пассивный режим (PASV)
- Асинхронная загрузка файлов с отслеживанием прогресса
- Неблокирующие операции (интеграция с Qt event loop)
- Подключаемое логирование через абстрактный интерфейс
- Обработка кодов ответа 125 и 150 (совместимость с разными FTP-серверами)
include(FetchContent)
FetchContent_Declare(
qt_network_utils
GIT_REPOSITORY https://github.com/Bo81K/qt-network-utils.git
GIT_TAG main
)
FetchContent_MakeAvailable(qt_network_utils)
target_link_libraries(your_app
PRIVATE
QtNetworkUtils::FileLogger
QtNetworkUtils::FtpClient
)git submodule add https://github.com/Bo81K/qt-network-utils.git third_party/qt-network-utilsadd_subdirectory(third_party/qt-network-utils)
target_link_libraries(your_app PRIVATE QtNetworkUtils::FtpClient)#include "qfile_logger.h"
QNetUtils::QFileLogger logger;
logger.init("app.log");
// Подключаем к UI
QObject::connect(&logger, &QNetUtils::QFileLogger::newLogMessage,
ui->textEdit, &QTextEdit::append);
logger.log("Приложение запущено");#include "qftp_client.h"
QNetUtils::QFtpClient ftp;
QObject::connect(&ftp, &QNetUtils::QFtpClient::connected, [&]() {
ftp.uploadFile("local.txt", "/remote/file.txt");
});
QObject::connect(&ftp, &QNetUtils::QFtpClient::uploadProgress,
[](qint64 sent, qint64 total) {
qDebug() << "Прогресс:" << sent << "/" << total;
});
ftp.connectToServer("ftp.example.com", 21, "user", "pass");Idle → Connecting → WaitingUser → WaitingPass → LoggedIn
↓
WaitingPasv
↓
WaitingTransfer
↓
Transferring
↓
LoggedIn
Все переходы состояний происходят в processReply() на основе кодов ответа FTP-сервера (220, 230, 227, 125, 150, 226 и т.д.).
mkdir build && cd build
cmake .. -DBUILD_EXAMPLES=ON
cmake --build .| Опция | По умолчанию | Описание |
|---|---|---|
BUILD_EXAMPLES |
ON | Собрать примеры приложений |
BUILD_SHARED_LIBS |
OFF | Собрать динамические библиотеки |
qt-network-utils/
├── CMakeLists.txt # Главный CMake
├── README.md
├── LICENSE
├── libs/
│ ├── file_logger/ # Библиотека логгера
│ │ ├── CMakeLists.txt
│ │ ├── include/
│ │ └── src/
│ └── ftp_client/ # Библиотека FTP-клиента
│ ├── CMakeLists.txt
│ ├── include/
│ └── src/
└── examples/
├── logger_demo/ # Пример использования логгера
└── ftp_upload/ # Пример загрузки файла по FTP
MIT License - см. LICENSE