QTcpServer代码
时间: 2023-06-01 17:03:23 浏览: 106
下面是一个简单的QTcpServer示例代码:
```
#include <QtNetwork/QTcpServer>
#include <QtNetwork/QTcpSocket>
class MyTcpServer : public QTcpServer
{
Q_OBJECT
public:
MyTcpServer(QObject *parent = nullptr) : QTcpServer(parent) {}
protected:
void incomingConnection(qintptr socketDescriptor) override
{
// 创建一个新的 QTcpSocket 对象
QTcpSocket *socket = new QTcpSocket(this);
// 通过描述符设置 socket
socket->setSocketDescriptor(socketDescriptor);
// 连接 socket 的 readyRead() 信号到槽函数
connect(socket, &QTcpSocket::readyRead, this, &MyTcpServer::onReadyRead);
// 连接 socket 的 disconnected() 信号到槽函数
connect(socket, &QTcpSocket::disconnected, this, &MyTcpServer::onDisconnected);
// 将 socket 添加到 socketList 中
socketList.append(socket);
}
private slots:
void onReadyRead()
{
// 获取发送数据的 socket
QTcpSocket *socket = qobject_cast<QTcpSocket *>(sender());
// 读取数据
QByteArray data = socket->readAll();
// 处理数据
// ...
}
void onDisconnected()
{
// 获取断开连接的 socket
QTcpSocket *socket = qobject_cast<QTcpSocket *>(sender());
// 从 socketList 中移除 socket
socketList.removeOne(socket);
// 删除 socket 对象
socket->deleteLater();
}
private:
QList<QTcpSocket *> socketList;
};
int main(int argc, char *argv[])
{
QCoreApplication app(argc, argv);
MyTcpServer server;
if (!server.listen(QHostAddress::Any, 12345)) {
qDebug() << "Failed to start server:" << server.errorString();
return 1;
}
qDebug() << "Server started on port" << server.serverPort();
return app.exec();
}
```
这个 QTcpServer 示例会监听 12345 端口,并在有客户端连接时创建一个新的 QTcpSocket 对象,并将其添加到 socketList 中。当客户端发送数据时,会触发 QTcpSocket 的 readyRead() 信号,将数据读取出来并进行处理。当客户端断开连接时,会触发 QTcpSocket 的 disconnected() 信号,将该 socket 从 socketList 中移除并删除该 socket 对象。
阅读全文