qt tcp多线程服务器
时间: 2023-09-23 08:09:48 浏览: 112
QT是一种跨平台的应用程序库,可以用于开发GUI程序和非GUI程序。QT提供了一些网络模块,可以用于开发TCP服务器和客户端程序。下面是一个使用QT实现TCP多线程服务器的示例代码:
```cpp
#include <QtCore>
#include <QtNetwork>
class TcpServer : public QTcpServer
{
Q_OBJECT
public:
TcpServer(QObject *parent = nullptr)
: QTcpServer(parent)
{
}
protected:
void incomingConnection(qintptr socketDescriptor) override
{
TcpClient *client = new TcpClient(this);
if (client->setSocketDescriptor(socketDescriptor)) {
connect(client, &TcpClient::disconnected, client, &TcpClient::deleteLater);
client->start();
} else {
delete client;
}
}
};
class TcpClient : public QTcpSocket
{
Q_OBJECT
public:
TcpClient(QObject *parent = nullptr)
: QTcpSocket(parent)
{
}
public slots:
void start()
{
connect(this, &TcpClient::readyRead, this, &TcpClient::readData);
connect(this, &TcpClient::disconnected, this, &TcpClient::deleteLater);
}
void readData()
{
while (bytesAvailable() > 0) {
QByteArray data = readAll();
// 处理数据
qDebug() << data;
}
}
};
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
TcpServer server;
server.listen(QHostAddress::Any, 8080);
qDebug() << "Server started on port" << server.serverPort();
return a.exec();
}
#include "main.moc"
```
在上面的代码中,TcpServer是一个继承自QTcpServer的类,用于监听TCP连接请求。当有新的连接请求时,incomingConnection()函数会被调用,创建一个TcpClient对象来处理连接。
TcpClient是一个继承自QTcpSocket的类,用于处理每个TCP连接。在start()函数中,连接readyRead信号和disconnected信号,当有数据到达或连接断开时,相应的槽函数会被调用。
在main函数中,创建一个TcpServer对象并调用listen()函数开始监听TCP连接请求。在客户端连接到服务器后,服务器会创建一个TcpClient对象来处理连接。服务器会一直运行,直到进程结束。
阅读全文