QT中c++利用TCP协议实现了一个多线程的文件互传系统
作者:野牛程序员:2024-01-22 18:02:08 C++阅读 2602
在QT中,使用C++编写多线程的文件传输系统是一种常见的任务。以下是一个简单的示例,演示了如何使用TCP协议在多线程环境中进行文件传输。请注意,这只是一个基本示例,实际应用中可能需要更多的错误处理和安全性检查。
// main.cpp #include <QCoreApplication> #include "server.h" #include "client.h" int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); // 在单独的线程中启动服务器 Server serverThread; serverThread.start(); // 在主线程中启动客户端 Client client; client.sendFile("path/to/your/file.txt"); return a.exec(); }
// server.h #ifndef SERVER_H #define SERVER_H #include <QTcpServer> #include <QThread> class Server : public QThread { Q_OBJECT public: explicit Server(QObject *parent = nullptr); protected: void run() override; private slots: void newConnection(); private: QTcpServer *tcpServer; }; #endif // SERVER_H
// server.cpp #include "server.h" #include <QTcpSocket> Server::Server(QObject *parent) : QThread(parent) { tcpServer = new QTcpServer(this); connect(tcpServer, &QTcpServer::newConnection, this, &Server::newConnection); if (!tcpServer->listen(QHostAddress::Any, 1234)) { qDebug() << "无法启动服务器:" << tcpServer->errorString(); } else { qDebug() << "服务器启动在端口 1234"; } } void Server::run() { exec(); // 启动线程的事件循环 } void Server::newConnection() { while (tcpServer->hasPendingConnections()) { QTcpSocket *clientSocket = tcpServer->nextPendingConnection(); // 在单独的线程或类中处理客户端套接字 // 为简单起见,仅打印从客户端接收到的数据 connect(clientSocket, &QTcpSocket::readyRead, [=]() { qDebug() << "从客户端接收到数据:" << clientSocket->readAll(); }); } }
// client.h #ifndef CLIENT_H #define CLIENT_H #include <QTcpSocket> #include <QThread> class Client : public QObject { Q_OBJECT public: explicit Client(QObject *parent = nullptr); void sendFile(const QString &filePath); private slots: void connected(); void bytesWritten(qint64 bytes); private: QTcpSocket *tcpSocket; }; #endif // CLIENT_H
// client.cpp #include "client.h" #include <QFile> Client::Client(QObject *parent) : QObject(parent) { tcpSocket = new QTcpSocket(this); connect(tcpSocket, &QTcpSocket::connected, this, &Client::connected); connect(tcpSocket, &QTcpSocket::bytesWritten, this, &Client::bytesWritten); tcpSocket->connectToHost("127.0.0.1", 1234); // 连接到服务器 } void Client::sendFile(const QString &filePath) { QFile file(filePath); if (file.open(QIODevice::ReadOnly)) { // 读取文件内容 QByteArray fileData = file.readAll(); // 将文件数据发送到服务器 tcpSocket->write(fileData); file.close(); } } void Client::connected() { qDebug() << "已连接到服务器"; } void Client::bytesWritten(qint64 bytes) { qDebug() << "已写入字节数:" << bytes; }
这个示例中,Server 类继承自 QThread,用于在一个独立的线程中监听来自客户端的连接。Client 类用于在主线程中连接到服务器并发送文件。
野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892
- 上一篇:C++STL库常用库函数总结
- 下一篇:c++泛洪算法