560 字
3 分钟

Qt中服务端的创建

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

tcp 服务器端创建:#

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

这里的this表示将服务器对象作为当前类的成员变量,方便在其他函数中使用。或者可以直接将*server定义在类的成员变量中。如

QTcpServer *server;

然后再在类的构造函数中初始化服务器对象:

server = new QTcpServer(this);
  1. 连接信号和槽(在构造函数中):
connect(server, &QTcpServer::newConnection, this, &MyServer::newConnection);

这里的newConnection是服务器对象的信号,当有新的客户端连接时会触发该信号。this表示将当前类作为槽函数的对象,&MyServer::newConnection表示当前类的槽函数。 在当前类中添加槽函数newConnection

void MyServer::newConnection()
{
QTcpSocket *socket = server->nextPendingConnection();
connect(socket, &QTcpSocket::readyRead, this, &MyServer::readyRead);
connect(socket, &QTcpSocket::disconnected, socket, &QTcpSocket::deleteLater);
}

这里的nextPendingConnection表示获取下一个Pending的连接,返回一个QTcpSocket对象。connect表示将readyRead信号连接到当前类的readyRead槽函数。disconnected表示当客户端断开连接时触发该信号。deleteLater表示将该QTcpSocket对象删除。或者自定义一个槽函数,在该槽函数中处理断开连接的逻辑。如:

void MyServer::socketDisconnected()
{
QTcpSocket *socket = qobject_cast<QTcpSocket*>(sender());
if(socket)
{
// 处理断开连接的逻辑,如:
qDebug() << "Socket disconnected:" << socket->peerAddress().toString();
}
}

在当前类中添加槽函数readyRead

void MyServer::readyRead()
{
QTcpSocket *socket = qobject_cast<QTcpSocket*>(sender());
if(socket)
{
QByteArray data = socket->readAll();//或者QString data = socket->readAll();
// 处理收到的数据,如:
qDebug() << "Received data:" << data;
}
}

这里的qobject_cast<QTcpSocket*>(sender())表示将信号发送者转换为QTcpSocket对象。readAll表示读取所有可用的数据。

  1. 监听端口:
server->listen(QHostAddress::Any, 8888);

这里的QHostAddress::Any表示监听所有可用的网络接口,8888表示监听的端口号。监听成功后,服务器对象会触发newConnection信号,此时会调用newConnection槽函数,并创建一个QTcpSocket对象,并连接readyRead信号和readyRead槽函数。

  1. 服务端发送数据:
void MyServer::sendDataToClient(QTcpSocket *socket, const QByteArray &data)
{
if(socket && socket->state() == QTcpSocket::ConnectedState)
{
socket->write(data);
}
}

这里的QTcpSocket *socket表示要发送数据的客户端socket对象。const QByteArray &data表示要发送的数据。write表示将数据写入socket对象。

Qt中服务端的创建
https://demo-firefly.netlify.app/posts/server-creation-in-qt/
作者
长琴
发布于
2025-11-13
许可协议
CC BY-NC-SA 4.0
最后更新于 2025-11-13,距今已过 8 天

部分内容可能已过时

评论区

目录

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