QT-TCP服务端开启多个线程处理收到多客户端发来的消息示例

本文主要解决的问题是:

一、一个服务端怎么处理多客户端的连接?

二、一个服务端怎么开启多个线程来处理所有客户端发来的消息?(换汤不换药,可以看这篇博客Qt封装一个类管理moveToThread( )正确的开启多线程、安全的退出线程的实例不管是开启多个客户端还是一个服务端开启多个线程都可以用此方法)这里我们还需要考虑弄一个全局的缓存区暂时来存放从客户端收到的消息,因为有时候服务端对消息的处理速度慢时,可能会造成数据丢失这些原因。

一些用到的函数等解释:

void  incomingConnection ( int socketDescriptor ) 当有新连接可用时,QTcpServer将调用此虚拟函数。注意:如果希望将传入连接作为另一个线程中的新QTcpSocket对象处理,则必须将socketDescriptor传递给另一个线程,在那里创建QTcpSocket对象并使用其setSocketDescriptor()方法。

一、一个服务端怎么处理多客户端的连接? 

首先要知道在QT中有QTcpServer来进行TCP通信,每个客户端连接到服务端时,这个QTcpSever会给他们分配一个socket。

伪代码:

    /************
     1 创建一个QTcpSever
     2 监听端口
     3 QTcpSever有客户端连接上来是,会触发newConnection信号,或者incomingConnection虚函数
     4 创建一个QList来存储QTcpSocket,后续需要用到每个客户端对应的socket时,在这个容器里取出就行了。
    ************/

1 在这里我用到了重写虚函数incomingConnection继承QTcpServer的方法来实现一个服务端如何处理多个客户端的连接,

2 当然也可以不用这种方法,直接在触发readReady信号时遍历容器即可,可以看本篇博客QT TCP服务端处理多个客户端发来的消息

 2的这种方法比较容易看懂,但是1也很简单,现在我们来看1的方法怎么实现吧。

在这里我把QTcpSever和QTcpSocket的处理封装成两个类,比较有MVC的那种分层管理的想法;当然你也可以不用封装成两个类,封装成一个也行。

调用代码示例:如此我们便开启了一个可以处理多个客户端发来的消息的服务器了

    SeverBy
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

咸鱼2333号程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值