由於專案需要使用到網路除錯及測試,為了練手,使用 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);
注意,不能使用isopen
或isvalid
來判斷是否連線成功,需要使用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...