QTcp Server的信号与槽的用法详解

QTcpServer是Qt中用于实现TCP服务器的类。它提供了很多信号和槽,方便我们在程序中进行网络通信。

新连接信号

QTcpServer::newConnection()

当有新客户端连接到服务器时,会发射该信号。可以通过connect函数将其与槽函数连接起来,以处理新连接。

例如:

connect(server, &QTcpServer::newConnection, this, &MyClass::onNewConnection);

出错信号

QTcpServer::error(QAbstractSocket::SocketError)

当服务器出现错误时,会发射该信号。需要注意的是,这里的错误类型是QAbstractSocket::SocketError枚举类型,而不是常见的errno值。

例如:

connect(server, static_cast<void(QTcpServer::*)(QAbstractSocket::SocketError)>(&QTcpServer::error),
        this, &MyClass::onServerError);

监听状态改变信号

QTcpServer::stateChanged(QAbstractSocket::SocketState)

当监听状态发生改变时,会发射该信号。同样需要注意传入的参数类型为QAbstractSocket::SocketState枚举类型。

例如:

connect(server, static_cast<void(QTcpServer::*)(QAbstractSocket::SocketState)>(&QTcpServer::stateChanged),
        this, &MyClass::onStateChanged);

关闭连接槽

QTcpServer提供了一个close函数用于关闭服务器。当调用close函数后,会自动关闭所有已经建立的连接,并停止接受新连接。

例如:

server->close();

接受连接

QTcpServer::nextPendingConnection()

当有新的客户端连接请求时,可以通过该函数获取一个已经建立好的socket。需要注意的是,每次调用该函数会返回一个不同的socket,因此需要保存返回值并在之后使用。

例如:

void MyClass::onNewConnection()
{
    QTcpSocket *socket = server->nextPendingConnection();
    connect(socket, &QTcpSocket::readyRead, this, &MyClass::onReadyRead);
}

读取数据信号

QTcpSocket::readyRead()

当socket接收到数据时,会发射该信号。可以通过readAll或者read等函数读取数据。

例如:

void MyClass::onReadyRead()
{
    QTcpSocket *socket = qobject_cast<QTcpSocket *>(sender());
    QByteArray data = socket->readAll();
    // ...
}

写入数据槽

QTcpSocket::write(const QByteArray &data)

可以通过write函数向客户端发送数据。

例如:

void MyClass::sendData(QTcpSocket *socket, const QByteArray &data)
{
    socket->write(data);
}

本文福利,费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,C++设计模式,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QSS,OpenCV,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击费领取↓↓

猜你喜欢

转载自blog.csdn.net/m0_73443478/article/details/131142135