Qt實踐錄 TCP網路除錯助手

2021-10-02 10:41:45 字數 3163 閱讀 4939

由於專案需要使用到網路除錯及測試,為了練手,使用 qt 編寫乙個串列埠除錯助手。本文按開發的過程進行簡單介紹,同時也涉及部分用到的模組**。詳細**參考原始碼倉庫。

在**復用方面,筆者認為 qt 比 mfc 好,比如主視窗**可以直接使用,當然,還要修改工程檔名稱和對應的依賴庫,介面控制項也要重新設計和實現。這也是筆者喜歡直接使用 qt creator 建立的預設檔案、類的原因。另外,如果使用純**實現窗體布局,其復用程度比用 qt creator 更加好。 實際上,本文的工程,就是在前一文章 《qt實踐錄:串列埠除錯助手》 原始碼基礎上修改而得的。窗體基本設定、圖示、狀態列、十六進製制顯示,定時傳送等等**,直接沿用。因此,文中不再重複前文所涉及的模組。

連線、斷開等邏輯處理未完善。

針對伺服器,理論上應該需要根據不同客戶端傳送資料(或定向,或全部),當前版本未實現,僅取最後乙個客戶端。

執行結果如圖1所示:

圖1qt 中網路相應的依賴庫為network,需要在工程檔案中新增對應的庫,如下:

qt       += core gui network
#include #include qtcpserver *m_tcpserver;

qlistm_clientlist;

qtcpsocket *m_tcpclisocket;

其中,m_tcpserver 用於tcp伺服器,m_tcpclisocket 用於儲存連線的客戶端。m_tcpclisocket 用於客戶端連線。

建立服務端:

// server

m_tcpserver = new qtcpserver();

// 連線newconnection訊號,svr_newconnect中處理客戶端的連線

connect(m_tcpserver, signal(newconnection()), this, slot(svr_newconnect()));

監聽埠:

m_tcpserver->listen(qhostaddress::any, port);

關閉:m_tcpserver->close();

接收資料:

tcpsocket->readall();

傳送資料:

tcpsocket->write(senddata, senddata.size());

當有新客戶端連線時,會自動呼叫svr_newconnect函式,該函式儲存客戶端socket,並關聯資料接收訊號和槽:

void mainwindow::svr_newconnect()

else

}

當客戶端傳送資料時,會自動觸發readyread函式,該函式讀取資料並顯示:

void mainwindow::readyread()

服務端的ip和埠,由介面輸入,連線服務端函式如下:

qhostaddress serverip;

serverip.setaddress(ui->cbremoteip->currenttext());

uint16_t port=ui->cbremoteport->currenttext().toushort();

m_tcpclisocket->connecttohost(serverip, port);

注意,不能使用isopenisvalid來判斷是否連線成功,需要使用waitforconnected判斷,示例如下:

if (!m_tcpclisocket->waitforconnected(600))

// client

m_tcpclisocket = new qtcpsocket();

connect(m_tcpclisocket, signal(connected()), this, slot(cli_connected())); // 客戶端連線

connect(m_tcpclisocket, signal(disconnected()), this, slot(cli_disconnected())); // 客戶端斷開連線

connect(m_tcpclisocket, signal(readyread()), this, slot(cli_receivedata())); // 客戶端接收資料

當遠端伺服器傳送資料到客戶端時,會自動觸發cli_receivedata函式:

void mainwindow::cli_receivedata()

介面使用設計師進行設計,如圖2所示。介面多數功能與前面文章一樣,故不再涉及。

圖2本工程接收顯示的文字有三種型別:時間戳+提示語、服務端資料、客戶端資料,為了區別,使用不同顏色顯示。核心**如下:

if (m_showtimestamp)

if (m_recvhex == 1)

else

// 根據型別,使用不同顏色顯示

if (tips.contains("server"))

else

筆者在此工具基礎上實現了自定義二進位制協議,並對 esp8266 進行操作,包括指示led燈、繼電器、出廠恢復、fota韌體公升級以及執行態的功能測試驗證等操作,同時整合了前面的串列埠功能,實現乙個工具進行全功能測試。由於與本文關聯不大,不再展開。僅以截圖展示:

本工程所有原始碼均可自由自主使用,包括但不限於新增、刪除、修改,商用、自用。由此帶來的成果/後果概與作者無關。限於水平能力,本程式無任何質量保證,本程式作者無提供服務之義務。

倉庫位址在此 。

Qt開源作品4 網路除錯助手

網路除錯助手和串列埠除錯助手是一對的,用qt開發專案與硬體通訊絕大部分都是要麼串列埠通訊 rs232 rs485 modbus等 要麼就是網路通訊 tcp udp http等 所以一旦涉及到這兩方面,多多少少肯定離不開對應的除錯助手協助進行程式的除錯,尤其是硬體工程師,更加需要第三方的獨立的除錯工具...

使用QT開發串列埠除錯助手

最終實現效果 通過設定對應引數,連線串列埠,進行串列埠通訊,然後就可以收發命令啦!話不多說,看 標頭檔案 ifndef serialwidget h define serialwidget h include include include include include include inclu...

網路除錯助手win10 網路除錯助手的簡單使用

本篇筆記就來分享sockettool這個網路助手簡單的使用。這裡給出一張tcp通訊程式設計過程圖 本篇筆記不涉及程式設計 本實驗框圖 1 這裡我們是把sockettool作為tcp客戶端 2 連線服務端 傳送資料 這就是作為sockettool作為tcp client的使用方法是不是很簡單 sock...