QTcpSocket 类是 Qt 网络模块中的一个类,用于实现 TCP 套接字的功能。它提供了客户端和服务器端应用程序进行网络通信的能力。\n\nQTcpSocket 类继承自 QAbstractSocket 类,它提供了 TCP 套接字的基本功能,如连接到服务器、发送和接收数据等。使用 QTcpSocket 类,可以轻松地实现基于 TCP 的网络通信。\n\nQTcpSocket 类的主要成员函数包括:\n- connectToHost(const QString &hostName, quint16 port):连接到指定的主机和端口。\n- write(const char *data, qint64 size):向套接字写入数据。\n- read(char *data, qint64 maxSize):从套接字读取数据。\n- readyRead():当有数据可读时,触发该信号。\n- disconnected():当套接字断开连接时,触发该信号。\n- error(QAbstractSocket::SocketError socketError):当套接字发生错误时,触发该信号。\n\nQTcpSocket 类的主要信号包括:\n- connected():当套接字成功连接到服务器时,触发该信号。\n- readyRead():当有数据可读时,触发该信号。\n- disconnected():当套接字断开连接时,触发该信号。\n- error(QAbstractSocket::SocketError socketError):当套接字发生错误时,触发该信号。\n\n使用 QTcpSocket 类,可以轻松地实现 TCP 客户端或服务器端应用程序。例如,可以通过 connectToHost() 函数连接到服务器,然后使用 write() 函数向服务器发送数据,使用 readyRead() 信号接收服务器发送的数据。另外,可以通过 disconnected() 信号来处理套接字断开连接的情况。\n\n下面是一个使用 QTcpSocket 类实现 TCP 客户端的简单示例:\n\n\n#include <QTcpSocket>\n\nQTcpSocket *socket = new QTcpSocket(this);\n\n// 连接到服务器\nsocket->connectToHost("127.0.0.1", 1234);\n\n// 当连接成功时,触发 connected() 信号\nconnect(socket, &QTcpSocket::connected, this, [=]() {\n qDebug() << "Connected to server";\n\n // 向服务器发送数据\nsocket->write("Hello Server");\n\n // 当有数据可读时,触发 readyRead() 信号\n connect(socket, &QTcpSocket::readyRead, this, [=]() {\n // 从套接字读取数据\n QByteArray data = socket->readAll();\n qDebug() << "Received data from server:" << data;\n });\n});\n\n// 当套接字断开连接时,触发 disconnected() 信号\nconnect(socket, &QTcpSocket::disconnected, this, [=]() {\n qDebug() << "Disconnected from server";\n});\n\n// 当套接字发生错误时,触发 error() 信号\nconnect(socket, QOverload<QAbstractSocket::SocketError>::of(&QAbstractSocket::error), this, [=](QAbstractSocket::SocketError socketError) {\n qDebug() << "Socket error:" << socketError;\n});\n\n\n以上示例中,首先创建一个 QTcpSocket 对象,并使用 connectToHost() 函数连接到服务器。当连接成功时,触发 connected() 信号,在槽函数中向服务器发送数据,并设置 readyRead() 信号的槽函数来接收服务器发送的数据。另外,还设置了 disconnected() 信号和 error() 信号的槽函数来处理套接字断开连接和错误的情况。

Qt TCP 套接字:使用 QTcpSocket 类实现网络通信

原文地址: https://www.cveoy.top/t/topic/lQRM 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录