667 字
3 分钟

Qt中客户端的创建

2025-11-13
浏览量 加载中...

qt中客户端的创建:#

  1. 在qt的项目文件中添加如下代码,导入网络模块:
QT += network
  1. 添加头文件:
#include <QTcpSocket>
  1. 创建客户端对象:
QTcpSocket *socket = new QTcpSocket(this);

这里的QTcpSocket *socket表示客户端的socket对象。可以直接在类的成员函数中定义。然后在类的构造函数中初始化:

socket = new QTcpSocket(this);
  1. 连接信号和槽(在构造函数中):
connect(socket, &QTcpSocket::connected, this, &MyClient::connected);
connect(socket, &QTcpSocket::readyRead, this, &MyClient::readyRead);
connect(socket, &QTcpSocket::disconnected, this, &MyClient::disconnected);

这里的MyClient表示客户端的类名。connectedreadyReaddisconnected分别表示连接成功、有数据可读、连接断开这三种情况,这三个信号分别对应三个自定义槽函数:connected()readyRead()disconnected(),可在对应的槽函数中处理对应的逻辑。

  1. 连接到服务器:
socket->connectToHost(QHostAddress::LocalHost, 8888);

这里的QHostAddress::LocalHost表示连接到本地主机,8888表示连接到本地主机的8888端口。 连接服务器可放到一个按钮的点击事件的槽函数中,然后ip和端口号可设置为动态参数,比如界面上的两个LineEdit控件:

void MyClient::connectToServer()
{
socket->connectToHost(ui->ipEdit->text(), ui->portEdit->text().toUShort());
}
  1. 发送数据:
void MyClient::sendData()
{
socket->write(ui->textEdit->toPlainText().toUtf8());
}

这里的ui->textEdit->toPlainText().toUtf8()表示要发送的字符串,此处发送的内容为textEdit控件中的文本内容,socket->write()表示将字符串发送到服务器。 发送数据可放到一个按钮的点击事件的槽函数中,比如界面上的一个PushButton控件,上面的槽函数就是按钮的点击信号的槽函数:

connect(ui->sendBtn, &QPushButton::clicked, this, &MyClient::sendData);
  1. 接收数据:
void MyClient::readyRead()
{
QByteArray data = socket->readAll();
ui->lineEdit->setText(QString::fromUtf8(data));
}

这里的ui->lineEdit->setText(QString::fromUtf8(data))表示将服务器返回的数据显示在lineEdit控件中,如果是回显到TextEdit控件,则使用ui->textEdit->setPlainText(QString::fromUtf8(data))。这里的setPlainText()是替换TextEdit控件中的文本内容,会清空TextEdit控件中的原有内容。如果要在光标处添加文本内容,则使用ui->textEdit->insertPlainText(QString::fromUtf8(data))

  1. 断开重连机制,使用定时器:
void MyClient::disconnected()
{
QTimer::singleShot(1000, this, &MyClient::connectToServer);
}

这里的QTimer::singleShot(1000, this, &MyClient::connectToServer)表示1秒后调用connectToServer()函数,实现断开重连机制。注意这里只适用连接成功的情况下断开才会重连,如果是连接失败,则不会重连。如果要实现没有连接成功也会重连的机制则需要再关联一个信号:

connect(socket, &QTcpSocket::errorOccurred, this, &MyClient::reconnect);

这里的QTcpSocket::errorOccurred表示连接错误信号,当连接错误时会触发该信号,然后调用reconnect()槽函数,实现重连机制。

// 重连逻辑函数
void MyClient::reconnect()
{
// 确保当前socket已关闭(避免重复连接)
if (socket->state() != QAbstractSocket::UnconnectedState) {
socket->abort();
}
// 延迟1秒后尝试重连
QTimer::singleShot(1000, this, &MyClient::connectToServer);
}
Qt中客户端的创建
https://demo-firefly.netlify.app/posts/client-creation-in-qt/
作者
长琴
发布于
2025-11-13
许可协议
CC BY-NC-SA 4.0
最后更新于 2025-11-13,距今已过 8 天

部分内容可能已过时

评论区

目录

Loading ... - Loading ...
封面
Loading ...
Loading ...
0:00 / 0:00