QTCP QUDP通訊建立思路分析

2021-10-21 04:33:47 字數 1343 閱讀 5232

一、 對於qt中的udp通訊建立,必須使用qt自己的udp類,即qudp。那麼如何建立qudp通訊,來作為上、下位機通訊呢??

思路分析:

第一步: 例項化qudpsocket套接字(new qudpsocket)

完成以上兩步後,需要接收資料,或者傳送資料。

方法1:

接收資料需要繫結訊號:void readyread (), 在自定義的槽函式中呼叫:qint64 pendingdatagramsize () const獲取資料長度; 然後直接讀取資料:

qint64 readdatagram ( char * data, qint64 maxsize, qhostaddress * address = 0, quint16 * port = 0 )

方法2:

執行緒之中執行,而不至於影響介面重新整理。

有時候主程式很忙,接收到的資料沒法及時解析並進入主程式處理流程,這時候就需要增加傳送與接收鍊錶,將接收到的完整資料直接放入鍊錶中,設定

定時器或者增加傳送與接收鍊錶執行緒,定時將資料**出去。

鍊錶執行緒迴圈檢查傳送與接收鍊錶中的資料,如果有則直接傳送,如果沒有則進入短暫休眠,休眠完成後再次檢查。

如果沒有資料,則進入短暫休眠。

二、對於qtcp來說,需要客戶端處理方法思路同udp

第一步:建立qtcpsocket套接字(new qtcpsocket)

第二步:主動連線主機,連線主機時要確保主機已經啟動並且已經進入監聽狀態,不然客戶端無法連線 :  void connecttohost ( const qstring & hostname, quint16 port, openmode openmode = readwrite )

完成以上兩步之後則需要等待連線成功訊號,繫結void connected ()訊號。也可以呼叫bool waitforconnected ( int msecs = 30000 ),阻塞等待連線;

客戶端程式的收發資料可以放入同乙個執行緒,並且使用同乙個qtcpsocket,;在呼叫阻塞函式等待連線成功後,可以向服務端傳送資料。客戶端的傳送資料與接收資料同樣建立

服務端需要建立:qtcpserver

第一步: 建立qtcpserver套接字(new qtcpserver);

第二步: 監聽客戶端連線:bool listen ( const qhostaddress & address = qhostaddress::any, quint16 port = 0 )

第三步: 繫結新客戶端連線建立訊號void newconnection ()

第四部: 如果訊號觸發,則呼叫virtual qtcpsocket * nextpendingconnection () 獲取連線的客戶端套接字,並做管理,進行互動等。

JAVA實現點對點通訊思路

1,客戶端a登陸的時候,傳送乙個udp資料報給伺服器,然後伺服器根據該包獲得客戶端a的ip和port並儲存到udpaddressmap 用登入名作為key儲存 中。2,客戶端a要執行資料傳送的時候,傳送乙個資訊給伺服器,帶上目標客戶端b的登陸名。3,伺服器將a的ip和port發給客戶端b,同時將b的...

通訊層優化思路小結

通訊測試最好使用2g測試,可以慢,但要能跑通,若出現 無法連線到網路 或者 網路連 接超時 的對話方塊,就是開發人員必須要解決的問題了。注意 大於 1kb 才進行壓縮,否則得不償失。經過 gzip 壓縮後,返回的資料量大幅減少。無論是 ios 還是android,都應該在基類 baseviewcon...

android socket通訊建立

最近做了乙個類似google remote的應用,主要功能是手機端通過網路發出按鍵,接收端接收並處理其事件 接收端 protected static final int sendport 8600 protected static final int receiveport 8601 private...