qt多线程tcp服务器
时间: 2023-08-10 22:05:56 浏览: 154
Qt多线程TCP服务器
下面是一个简单的Qt多线程TCP服务器示例:
```cpp
#include <QtNetwork>
#include <QtConcurrent>
class TcpServer : public QTcpServer
{
Q_OBJECT
public:
TcpServer(QObject *parent = nullptr) : QTcpServer(parent) {}
signals:
void messageReceived(QTcpSocket *socket, const QByteArray &message);
protected:
void incomingConnection(qintptr socketDescriptor) override
{
// 创建一个新的socket对象
QTcpSocket *socket = new QTcpSocket(this);
// 设置socket描述符
socket->setSocketDescriptor(socketDescriptor);
// 创建一个新的线程并将socket对象移动到该线程
QtConcurrent::run(this, &TcpServer::processSocket, socket);
}
private slots:
void processSocket(QTcpSocket *socket)
{
// 连接socket的disconnected信号到该槽
connect(socket, &QTcpSocket::disconnected, socket, &QTcpSocket::deleteLater);
// 连接socket的readyRead信号到该槽
connect(socket, &QTcpSocket::readyRead, this, [=]() {
// 从socket中读取数据
QByteArray message = socket->readAll();
// 发送messageReceived信号
emit messageReceived(socket, message);
});
// 进入事件循环
QThread::currentThread()->exec();
}
};
```
该TcpServer类继承自QTcpServer,重写了incomingConnection方法,用于处理新连接。在incomingConnection方法中,创建一个新的QTcpSocket对象,设置socket描述符,创建一个新的线程并将socket对象移动到该线程。
在processSocket方法中,连接socket的disconnected信号和readyRead信号到对应的槽函数。在readyRead槽函数中,从socket中读取数据,并发送messageReceived信号。
可以将该TcpServer类实例化并连接到messageReceived信号,以便在收到新消息时进行处理。
阅读全文