久久婷婷香蕉热狠狠综合,精品无码国产自产拍在线观看蜜,寡妇房东在做爰3,中文字幕日本人妻久久久免费,国产成人精品三上悠亚久久

當前位置:首頁 > 嵌入式培訓 > 嵌入式學習 > 講師博文 > 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 北京華清遠見科技集團有限公司 版權所有 ,,京公海網安備11010802025203號

回到頂部