Fortune服务端展示了如何去创建一个多线程服务端。此实例与Fortune客户端运行。

首先继承QTcpServer重写下子类,方便实现多线程。

这里需要两个类:一个是QTcpServer的子类,一个是QThread的子类

  class FortuneServer : public QTcpServer{Q_OBJECTpublic:FortuneServer(QObject *parent = 0);protected:void incomingConnection(qintptr socketDescriptor) override;private:QStringList fortunes;};

重写了QTcpServer的QTcpServer::incomingConnection(),使用list存储服务端需要返回的字符串:

  FortuneServer::FortuneServer(QObject *parent): QTcpServer(parent){fortunes << tr("You've been leading a dog's life. Stay off the furniture.")<< tr("You've got to think about tomorrow.")<< tr("You will be surprised by a loud noise.")<< tr("You will feel hungry again in another hour.")<< tr("You might have mail.")<< tr("You cannot kill time without injuring eternity.")<< tr("Computers are not intelligent. They only think they are.");}

QTcpServer::incomingConnection()中有个socketDescriptor参数,表示元素套接字描述符。这里FortuneThread有3个参数,一个是套接字描述符,一个是发送给客户端的字符串,还有个是传入的指向父节点的指针,并且关联了信号和槽,当线程完成后现在会被指定释放,使用start()运行。

  void FortuneServer::incomingConnection(qintptr socketDescriptor){QString fortune = fortunes.at(QRandomGenerator::global()->bounded(fortunes.size()));FortuneThread *thread = new FortuneThread(socketDescriptor, fortune, this);connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater()));thread->start();}

FortuneThread继承了QThread,重写了run方法,业务功能是操作被对应的socket。并且有个错误信号:

  class FortuneThread : public QThread{Q_OBJECTpublic:FortuneThread(int socketDescriptor, const QString &fortune, QObject *parent);void run() override;signals:void error(QTcpSocket::SocketError socketError);private:int socketDescriptor;QString text;};

Fortune构造函数:

  FortuneThread::FortuneThread(int socketDescriptor, const QString &fortune, QObject *parent): QThread(parent), socketDescriptor(socketDescriptor), text(fortune){}

下面是run方法,首先创建一个QTcpSocket,然后设置socketDescriptor,用于操作本地套接字。

  void FortuneThread::run(){QTcpSocket tcpSocket;if (!tcpSocket.setSocketDescriptor(socketDescriptor)) {emit error(tcpSocket.error());return;}

随后构造数据:

      QByteArray block;QDataStream out(&block, QIODevice::WriteOnly);out.setVersion(QDataStream::Qt_4_0);out << text;

最后进行TCP的分手:

      tcpSocket.write(block);tcpSocket.disconnectFromHost();tcpSocket.waitForDisconnected();}

Qt文档阅读笔记-Threaded Fortune Server Example解析相关推荐

  1. Qt文档阅读笔记-QML Canvas的官方解析及实例

    目录 官方解析 博主例子 官方解析 Canvas可以用于画直线或曲线,简单或复杂的形状,图形,图片,并且他能加文字,颜色,阴影,和颜色梯度,和其他的装饰,可以进行低像素操作.Canvas可以保存成图像 ...

  2. Qt文档阅读笔记-Simple Anchor Layout Example解析

    这个例子展示了锚布局在视图场景中的使用. 此篇例子其实就是教QGraphicsAnchorLayout类的使用. 首先创建了QGraphicScene(场景),3个widgets(a,b,c),以及一 ...

  3. Qt文档阅读笔记-QtConcurrent Progress Dialog Example解析

    这篇展示了如何监听任务的进度. QtConcurrent Progress Dialog使用QFutrueWathcer类去监听任务进程进展. 代码如下: progressdialog.pro QT ...

  4. Qt文档阅读笔记-FileDialog QML Type官方解析与实例

    目录 官方解析 博主例子 官方解析 FileDialog是基于文件的选择器,可以选择文件或文件夹,创建文件,这个Dialog初始化是不可见的,得需要设置他为visible或调用open()即可. 下面 ...

  5. Qt文档阅读笔记-Label QML Type官方解析及实例

    目录 官方解析 博主例子 官方解析 Label扩展了父类Text中的styling和font.Label同样是有可视化的background项. Label {text: "Label&qu ...

  6. Qt文档阅读笔记-Multiple Inheritance Example 实例解析及Automatic Connections解析

    目录 Multiple Inheritance Example 实例解析 Automatic Connections解析 Multiple Inheritance Example 实例解析 这个实例很 ...

  7. Qt文档阅读笔记-TextEdit QML Type官方解析及实例

    目录 官方解析 博主栗子 官方解析 TextEdit展示了一个可编辑的一块,是有格式的文本. 他同样能展示普通文本和富文本: TextEdit {width: 240text: "<b ...

  8. Qt文档阅读笔记-Text QML Type官方解析及实例

    目录 官方解析 博主例子 官方解析 Text能够展示纯文本和富文本.举个例子,红色文本以及指定的字体和大小 Text {text: "Hello World!"font.famil ...

  9. Qt文档阅读笔记-Button QML Type官方解析及实例

    目录 官方解析 博主栗子 官方解析 按钮展示了一个按钮控件,这个控件可以被用户所按下,按钮是通常被用于执行一个操作,或者解决一个问题.buttons有如下几个典栗,如Ok,Apply,Cancel,C ...

最新文章

  1. PyTorch Cookbook(常用代码段集锦)
  2. 第二关练习题总结完结
  3. elementUI表格组件:自定义列模板(完整案例)
  4. 马斯克:将打造一款2.5万美元电动汽车
  5. 依赖反转原理,IoC容器和依赖注入:第1部分
  6. [linux]LINUX程序设计cc1--入门
  7. HTML——网页设计基础
  8. 计算机桌面ie图标无法删除,桌面IE浏览器图标无法删除怎么办
  9. 银河麒麟服务器修改ip,银河麒麟配置DNS服务器
  10. SunlightCoin简介——SunlightCoin 人人都是矿工
  11. CorelDRAW VBA - 第一个Hello World程序
  12. 电容器功率密度和能量密度
  13. 通俗易懂数仓建模:范式建模与维度建模
  14. 工具 UltraISO
  15. 【毕业设计】基于STM32 的电子计步器的设计与实现 - 物联网 单片机 嵌入式
  16. python将图片转换为PDF文件
  17. [Dubbo新闻]--Dubbo正式进入Apache孵化器,开启开源新时代
  18. Mongrel无法启动解决方案
  19. 单词翻译程序 go实现
  20. 脸部动作编码系统(FACS)应用

热门文章

  1. Executors浅析
  2. RDIFramework.NET ━ .NET快速信息化系统开发框架 V2.8 版本━新增企业通(内部简易聊天工具)...
  3. ASP.NET中的OutOfMemoryException
  4. 程序员水平自测题:程序员们,想知道你的技术达到了什么水平吗?
  5. IDC、刘润:企业如何通过数字化转型,驱动业务发展?附98页PPT
  6. 在演唱过后的飞秋代码
  7. 免费语音软件可以导入你在飞鸽传书2008
  8. FreeEIM V 2.8.9.8 改善计划
  9. 联想将推出全新系列笔记本
  10. CString Management (关于CString的所有操作)