当前位置:首页 > 嵌入式培训 > 嵌入式学习 > 讲师博文 > QT中TCP阻塞服务器的写法

QT中TCP阻塞服务器的写法 时间:2018-09-29      来源:未知

在上课的过程中,有时候需要测设一些客户端,而这些客户端的功能逻辑比较简单,常常是阻塞的方式,为了对这些客户端进行测试,需要一个简单的服务器。本文主要实现以阻塞的方式实现QT TCP服务器。

 

1. 子线程处理网络数据实现方式

该服务器实现了一个简单的界面,可以查看客户端与服务器的链接过程。因此,需要在与客户端进行网络数据交互的时候,来更新界面。比较直观的一种做法就是开一个子线程专门用来进行处理网络数据。

 

具体的做法是重新写一个类,继承自QT QThread类。在该类中重新实现QThread::run函数,并在主线程中创建一个该类的对象,即创建一个新的线程,并调用QThread::start()函数来启动该子线程。

2. 子线程网络数据的处理

 

在子线程中,重新实现QThread::run()函数,将所有的QTcpServer的操作放在run函数中。这些操作包括: 新建一个QTcpServer对象,以及一个服务器轮询阻塞式处理客户连接、处理客户数据的基本流程。由于QT中套接字式异步的,因此参考QT的手册,若要实现同步(阻塞式),需要使用特使用特殊的套接字对象接口waitForxxx()。

 

处理QTcpServer及监听端口:

为客户端发送Hello数据(发送完成调用waitForBytesWritten()):

接收客户端数据(数据格式为4字节大小+文件内容):

根据接收到数据进行界面更新,并关闭连接:

3. 子线程中网络数据交互的过程对界面的更新

 

由于QT的界面更新需要在主线程中处理,因此需要使用信号和槽函数来实现主线程、子线程的数据交互。

主要是在主线程中的界面窗口部件需要设置更新界面函数,在主线程中更新界面,而何时更新应该由子线程来通知。因此子线程需要发出信号,主线程中窗口部件需要实现更新界面的槽函数。

 

窗口部件实现界面更新(槽函数):

子线程实现信号:

4. 实现主体流程

 

在main函数中创建窗口界面,并创建子线程。然后将子线程的更新界面的信号与窗口部件的槽函数进行连接。后启动子线程,显示窗口。

上一篇:百兆以太网使用的电信号编码分析

下一篇:2.6.2 IO模式介绍

热点文章推荐
华清学员就业榜单
高薪学员经验分享
热点新闻推荐
前台专线:010-82525158 企业培训洽谈专线:010-82525379 院校合作洽谈专线:010-82525379 Copyright © 2004-2022 北京华清远见科技集团有限公司 版权所有 ,京ICP备16055225号-5京公海网安备11010802025203号

回到顶部