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模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击莬费领取↓↓