Qt一步步搭建TcpServer1——封装QTcpServer,QTcpSocket

本文介绍如何在Qt中逐步构建TCP Server,包括设计思路、QTcpServer的理解和封装,以及TcpSession的封装。通过封装,实现了Start、Stop接口,并确保了Session的安全管理。后续将探讨线程池在处理大量连接时的角色。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

承接上章:Qt一步步搭建TcpServer0——序

 要搭建网络库,那么肯定要从Server和Socket开始入手,本章就从封装QTcpServer和QTcpSocket开始入手,做好第一步工作。

1、序

1.1、NetAPI的设计思路

画了一张图来描述思路,一般来说,网络库的思路大都如下:
这里写图片描述

其实图中注释描述的也比较清楚,能够较为直观体现出Server端的网络库多线程工作流程,我觉得也就没必要再过多解释了。

1.2、了解QTcpServer

官网文档地址:QTcpServer

关于QTcpServer的介绍,官方已经说的比清楚了:
这里写图片描述

基本上是属于傻瓜式编程,大部分的工作都由底层给我们做好了。通常情况下,我们只需要监听一下端口,绑定个newConnection()就可以在新连接连入的时候获取到套接字:

int port = this->ui->spinBox->value();
QTcpServer *tcpserver = new QTcpServer();
tcpserver->listen(QHostAddress::Any, port);
connect(tcpserver, &QTcpServer::newConnection, this, &MainWindow::SlotNewConnection);

然后通过nextPendingConnection获取套接字就行了。

1.3、设计QtcpServer

关于QTcpServer的设计其实主要有两种方式:

1、组合:如上面官方介绍所言,以组合的形式封装QTcpServer,然后连接newConnection信号槽,在槽函数里nextPendingConnection获取新socket,而这个socket将由QTcpServer来管理,自动删除:
这里写图片描述

2、继承:继承自QTcpServer,然后重载函数incomingConnection,在函数里自己去创建Socket对象并管理。

方式一和方式二其实都可以,但对我而言,我需要自定义socket,并且这个socket将会抛给上层,上层在整个过程中可能会存在需要使用到socket对象的情况,生命周期需要我的网络库来掌管,那么我将使用方式二。

1.4、开始

新建项目,在pro文件中添加network库:

QT       += core gui network

2、TcpServer的封装

TcpServer封装自QTcpServer,基本功能底层已经做了很多,那么我们要做的就是做成能够直接用于项目需求上

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值