QTcpServer
是 Qt 网络模块中用于创建 TCP 服务器的类。它负责接受客户端的连接并为每个连接创建相应的 QTcpSocket
对象。以下是对 QTcpServer
的详细说明,包括其功能、用法以及常用的信号和槽。
主要功能
- 监听连接:
QTcpServer
可以在指定的地址和端口上监听传入的 TCP 连接。 - 接受连接:当有客户端尝试连接时,
QTcpServer
可以接受连接,并为每个客户端创建一个新的QTcpSocket
实例。 - 管理多个连接:可以同时处理多个客户端连接。
常用方法
-
listen(QHostAddress address, quint16 port)
:启动服务器并在指定的地址和端口上监听。返回true
表示成功,false
表示失败。 -
nextPendingConnection()
:从等待连接的队列中获取下一个客户端连接。返回一个指向QTcpSocket
的指针。 -
close()
:停止服务器并关闭所有活动连接。
常用信号
newConnection()
:当有新的客户端连接时发出此信号。可以通过连接此信号来处理新连接的逻辑。
使用示例
下面是一个简单的 QTcpServer
的使用示例,展示了如何创建一个基本的 TCP 服务器:
#include <QTcpServer>
#include <QTcpSocket>
#include <QCoreApplication>
#include <QObject>
#include <QDebug>
class MyTcpServer : public QTcpServer {
Q_OBJECT
public:
MyTcpServer(QObject *parent = nullptr) : QTcpServer(parent) {
// 连接 newConnection 信号到槽
connect(this, &QTcpServer::newConnection, this, &MyTcpServer::onNewConnection);
}
void startServer(quint16 port) {
if (listen(QHostAddress::Any, port)) {
qDebug() << "Server started on port" << port;
} else {
qDebug() << "Server could not start!";
}
}
private slots:
void onNewConnection() {
QTcpSocket *clientSocket = nextPendingConnection();
if (clientSocket) {
qDebug() << "New client connected:" << clientSocket->peerAddress().toString();
// 连接 readyRead 信号到处理函数
connect(clientSocket, &QTcpSocket::readyRead, this, [clientSocket]() {
QByteArray data = clientSocket->readAll();
qDebug() << "Received data:" << data;
// 回复客户端
clientSocket->write("Message received");
});
// 连接 disconnected 信号到处理函数
connect(clientSocket, &QTcpSocket::disconnected, clientSocket, &QTcpSocket::deleteLater);
}
}
};
int main(int argc, char *argv[]) {
QCoreApplication a(argc, argv);
MyTcpServer server;
server.startServer(12345); // 在12345端口上启动服务器
return a.exec();
}
#include "main.moc"
关键点解释
- 类定义:
MyTcpServer
继承自QTcpServer
,并实现了一个简单的 TCP 服务器。 - 监听端口:
startServer
方法中调用listen()
启动服务器。 - 新连接处理:当有新连接时,
onNewConnection
槽会被调用,通过nextPendingConnection()
获取客户端的套接字。 - 数据读取:当客户端发送数据时,
readyRead
信号会被触发,通过连接到槽来读取数据并回复客户端。 - 内存管理:使用
deleteLater()
确保在客户端断开连接时,相关资源得到释放。
总结
QTcpServer
是一个功能强大的类,能够轻松地管理和处理 TCP 连接。通过信号与槽机制,QTcpServer
可以有效地响应新的客户端连接、接收数据并处理断开连接的情况。这使得构建基于 TCP 的网络应用程序变得直观和高效。