上一節已經基本上完成了qt介面的基本布局,下面就是後台資料的傳送和接收了,
前面說了,qt和uc/os 互動使用的方式是tcp
為啥要用tcp,而不使用別的呢,
udp:按道理udp是最好的,不用連線,想發就發,不用管埠。但是,qt這個鬼,他封裝的udp函式不支援伺服器下發資料,也就是udp的伺服器不能下發資料,只能接收。
串列埠:既然是串列埠通訊,為啥不直接用串列埠呢。c語言對串列埠的支援太差了, 很不好用,qt到還好,找個外掛程式就能完成,
所以最後就採用了tcp的傳輸方式,既可以收發,也可以同時對應多個下位機,
下面就是qt建立tcp伺服器的**,
首先,匯入tcp標頭檔案之前,得先再pro檔案裡面加入這行**
qt += network這個是幹什麼用的??好問題,
咱們開啟qt的原始碼包,—qt是開源的
你在 qt/qt5.4.1/5.4/mingw491_32/include下面會看到有很多個資料夾,其中就有qtnetword,我們要匯入的標頭檔案 qtcpserver.h 就在這個資料夾下面,所以在工程檔案裡面匯入netword資料夾,就可以了。
下面就是具體的**,tcp的工作原理啊,工作流程什麼的, google一大堆,咱就不說了,
int port = ui->combobox->currenttext().toint();
tcpsocket = new qtcpserver(this);
tcpsocket->listen(qhostaddress::any,port);
connect(tcpsocket,signal(newconnection()),this,slot(readpendingdatagrams()));
connect(tcpsocket,signal(destroyed()),this,slot(desconect()));
void updcomm::desconect()
}}void updcomm::readpendingdatagrams()
第乙個函式,是定義乙個tcp連線,監聽所有的連線,埠號是通過介面設定的。
兩個connect 乙個是有新的鏈結過來,乙個是銷毀乙個連線的時候觸發,
readpendingdatagrams 函式比較複雜一點點,
因為會有很多的下位機連線到tcp埠,所以我們必須得給每乙個下位機分配乙個tcpsocket,這樣每個下位機就是乙個單獨的個體,能夠單獨接收他發來的資料,也可以單獨給他傳送資料,client是乙個陣列,型別是乙個class,表示的是乙個下位機,包括名字,ip,還有socket變數,
因為我只有一台機器,ip位址還有name都是一樣的,無法篩選制定的下位機,所以銷毀函式沒有實現。
Qt中串列埠傳送HEX資料
在lineedit輸入資料的型別是qstring型別,以往我在傳送的時候是ascii方式傳送,這會兒突然遇到乙個是十六進製制傳送 接受的下位機,就需要將qstring 轉化為十六進製制,本來直接用tohex進行轉化,但考慮到在輸入的的時候有間隔符之類的,我就寫了個轉化的函式 以下是轉化單個字元的函式...
TCP連線,資料傳送,結束。
那麼在tcp三次握手過程中做了哪些事呢?先來看看tcp報文段首部的格式 tcp客戶端在第一次握手時會向伺服器端傳送乙個報文段,沒有傳送資料,會將原埠號和目地埠號,初始化報文的序號,並將syn標緻置為1,表明現在是哪兩個程序之間在建立鏈結 傳送的初始序列號是多少等,客戶端能接收的報文大小的視窗是多大等...
串列埠傳送資料
s 串列埠程式設計 詳解4 串列埠傳送資料 串列埠傳送資料報括 十六進製制傳送資料 手動傳送資料 自動傳送資料 手動傳送資料的 如下 cpp view plain copy 手動傳送 long tx count 0 void cscommdlg onbuttonmanualsend else els...