QTcpSocket使用指南与实践
QTcpSocket 深度解析与实践指南
一、QTcpSocket 概述
QTcpSocket是Qt Network模块提供的TCP协议网络通信类,继承自QAbstractSocket,用于实现TCP客户端功能。它与QTcpServer配合使用,支持流式数据传输,提供面向连接的可靠通信。
核心特性:
-
基于事件驱动的异步IO模型
-
支持IPv4/IPv6双协议栈
-
提供SSL/TLS加密支持(需QSslSocket)
-
跨平台统一接口(Windows/Linux/macOS)
二、基础使用流程
1. 创建Socket对象
QTcpSocket *socket = new QTcpSocket(parent);
2. 连接服务器
socket->connectToHost("127.0.0.1", 8888);
3. 信号处理
关键信号绑定:
// 连接成功
connect(socket, &QTcpSocket::connected,
[](){ qDebug() << "Connected!"; });
// 收到数据
connect(socket, &QTcpSocket::readyRead,
[=](){ handleData(socket); });
// 断开连接
connect(socket, &QTcpSocket::disconnected,
[](){ qDebug() << "Disconnected!"; });
// 错误处理
connect(socket, QOverload<QAbstractSocket::SocketError>::of(&QAbstractSocket::error),
[](QAbstractSocket::SocketError error){
qDebug() << "Error:" << error;
});
4. 发送数据
QByteArray data = "Hello Server!";
socket->write(data);
// 确保立即发送
socket->flush();
5. 接收数据
推荐处理方式:
void handleData(QTcpSocket* socket) {
while(socket->bytesAvailable() > 0) {
QByteArray buffer = socket->readAll();
processData(buffer);
}
}
三、完整客户端示例
class TcpClient : public QObject {
Q_OBJECT
public:
explicit TcpClient(QObject *parent = nullptr)
: QObject(parent) {
socket = new QTcpSocket(this);
connect(socket, &QTcpSocket::connected, [this](){
qInfo() << "Connected to server";
socket->write("Client Ready\n");
});
connect(socket, &QTcpSocket::readyRead, [this](){
QByteArray data = socket->readAll();
qInfo() << "Received:" << data;
});
connect(socket, &QTcpSocket::disconnected, [this](){
qWarning() << "Connection closed";
});
}
void connectToServer(const QString &host, quint16 port) {
qInfo() << "Connecting to" << host << ":" << port;
socket->connectToHost(host, port);
}
private:
QTcpSocket *socket;
};