QTcpSocket并发操作例子代码
时间: 2023-03-25 13:03:57 浏览: 56
以下是一个简单的 QTcpSocket 并发操作的例子代码:
```cpp
#include <QTcpSocket>
#include <QThread>
class TcpClient : public QObject
{
Q_OBJECT
public:
TcpClient(QObject *parent = nullptr) : QObject(parent) {}
public slots:
void connectToServer(const QString &host, quint16 port)
{
QTcpSocket *socket = new QTcpSocket(this);
socket->connectToHost(host, port);
connect(socket, &QTcpSocket::readyRead, this, &TcpClient::readData);
connect(socket, &QTcpSocket::disconnected, socket, &QTcpSocket::deleteLater);
}
void readData()
{
QTcpSocket *socket = qobject_cast<QTcpSocket *>(sender());
if (socket) {
QByteArray data = socket->readAll();
// 处理接收到的数据
}
}
};
int main(int argc, char *argv[])
{
QCoreApplication app(argc, argv);
TcpClient client;
QThread thread;
client.moveToThread(&thread);
thread.start();
QObject::connect(&app, &QCoreApplication::aboutToQuit, &thread, &QThread::quit);
client.connectToServer("localhost", 1234);
return app.exec();
}
```
这个例子中,我们创建了一个 `TcpClient` 类,用于连接服务器并处理接收到的数据。在 `connectToServer` 槽函数中,我们创建了一个 `QTcpSocket` 对象,并连接到指定的服务器和端口。在连接成功后,我们连接了 `readyRead` 信号,以便在有数据可读时读取数据。在 `readData` 槽函数中,我们读取了所有可用的数据,并进行了处理。
为了实现并发操作,我们将 `TcpClient` 对象移动到一个新的线程中,并启动该线程。这样,我们就可以在主线程中继续执行其他任务,而不会阻塞网络操作。最后,我们连接了 `aboutToQuit` 信号,以便在应用程序退出前停止线程。