1. 程式人生 > >Qt客戶服務端傳輸資料總結

Qt客戶服務端傳輸資料總結

第一個小專案是關於Qt多執行緒與網路傳輸的。
環境:VS2015+QT5.3(或者任意的其他版本的VS+QT組合)
要求:分別編寫一個客戶端和伺服器端的程式,程式A作為客戶端,程式B作為伺服器端,具體要求如下(期限3到5天時間):
a)程式B需要每隔1秒向程式A不停的傳送報文1,報文2和報文3三種報文,用多執行緒的方式實現三種報文的傳送。報文采用結構體進行定義(包括報文頭,報文資料,報文尾三部分),報文資料也用結構體的形式進行定義。
b)程式A的介面需要三個元素:
1)可以進行伺服器端IP和埠號配置的輸入框;
2)需要對程式B發過來的報文內容進行顯示(只需要顯示報文資料內容,不需要顯示報文頭和尾);
3)需要一個列表用來對不同型別的報文的個數進行統計,列表列名包括報文名字和報文個數(報文個數需要實時統計)。
c)通迅部分採用的通訊機制,不做強制要求,以實現為目的;其他部分需要採用QT實現。
這個題目我的思路是:
首先解決服務端的資料傳送問題:
初始化網路環境–>初始化套接字–>等待客戶端連線–>接入套接–>初始化三個執行緒並把套接字傳入–>傳送資料
客戶端接收資料:
初始化網路環境–>初始化套接字–>連線伺服器–>獲取套接字資料存入快取池–>重新整理介面資料

期間遇到的疑惑:

執行緒間共享資料?
執行緒間貢獻一個數據,好像只要不是new出來的,可以共享。幾個共享執行緒間傳送資料,共享一個套接字,把資料作為執行緒類初始化引數傳過去。

Qt的自定義訊號是怎麼做的?
寫一個函式,定義觸發條件,滿足觸發條件了就emit傳送訊號。

如何通過套接字傳輸結構體?
記憶體打包。把記憶體中的內容通過memcpy拷貝到一個字元陣列當中。接收之後用一個通用結構體存起來,再通過資料報頭解析資料報。我傳送的三種報文的大小是一樣的,如果大小不一樣呢?關於記憶體對其的規律。

Qt中的多執行緒開啟方式?
執行緒類繼承QThread,重寫Run函式。
據說還有一種辦法,尚未驗證,執行緒類繼承自QObject類,利用movetoThread方法改變執行緒所屬到一個繼承自QThread類的類的物件中。

盲點:
關於Qt的網路套接字用法?規避了這個問題,採用了Windows系統提供的套接字
關於QByteArray
關於Qt的流

改進的地方:
把通訊模組獨立設計出來

相關推薦

Qt客戶服務傳輸資料總結

第一個小專案是關於Qt多執行緒與網路傳輸的。 環境:VS2015+QT5.3(或者任意的其他版本的VS+QT組合) 要求:分別編寫一個客戶端和伺服器端的程式,程式A作為客戶端,程式B作為伺服器端,具

WebService手寫簡單案例:客戶服務資料互動

本篇部落格是模擬服務端釋出服務,客戶端模擬接收服務端的返回資料的一個簡單案例(客戶端輸入姓名,服務端根據客戶端輸入的姓名模糊查詢身份證的案例) 服務端釋出服務 1.專案準備工作:新建一個web專案,匯入mysql的jar包放入工程,寫好jdbc連線,寫好實體類,寫dao,不同的

python : 通過socket的Tcp/ip協議實現客戶服務資料互動

#服務端 繫結socket 繫結目的ip和埠 建立監聽 建立連線 資料互動 import socket ''' #建立socket :通過server接收 #繫結目的ip和埠號 #設定監聽 #建立連線Socket,Address接收資訊 #資料互

java網路程式設計(一)使用TCP協議完成客戶服務資料傳遞

在正式進入網路程式設計之前先簡單介紹一個網路程式設計的基本概念。 網路程式設計就是兩個或多個裝置之間的資料交換,其實更具體的說,網路程式設計就是兩個或多個程式之間的資料交換即可以理解為一次網路通訊過程。在網路通訊中,第一次主動發起通訊

服務傳輸檔案到客戶(一對一)

public class FTPServer { //伺服器 public void start(File target) throws IOException{ //建立一個伺服器 ServerSocket ss = new ServerSocket(5678)

Android客戶採用Http 協議Post方式請求與服務進行資料互動

本示例以Servlet為例,演示Android與Servlet的通訊。 眾所周知,Android與伺服器通訊通常採用HTTP通訊方式和Socket通訊方式,而HTTP通訊方式又分get和post兩種方式。至於Socket通訊會在以後的博文中介紹。 HTTP協議簡介:

QT TCP服務如何判斷客戶已斷開連線

在用QT寫服務端時想要知道客戶端是否斷開連線,百度一下沒有找到方法,看了下幫助文件,得到以下方法,實測可用,如有更好的還請告知 enum SocketError {           ConnectionRefusedError,           RemoteH

藍芽小試牛刀之模擬藍芽客戶服務資料

今天我們來實現一下客戶端和服務端通過藍芽傳資料 效果圖如下: 這個佈局太簡單了,我就不給出了,直接上邏輯. MainActivity: public class MainActivity extends Activity implements

TCP與UDP的異同(服務接收資料客戶傳送資料

面向TCP連線的socket通訊程式: 服務端:建立套接字,指定協議族(sockaddr_in),繫結,監聽(listen),接受連結(accept),傳送或接收資料;客戶端:建立套接字,指定協議族,連線,傳送或接收資料 這幾個步驟都是必須的。 補充:在傳送和接受資料時:write/send/sendto,

Android(客戶)通過socket與QT服務)通訊

一、概述 在這裡我想實現一個跨平臺的socket通訊,Android手機作為客戶端向Ubuntu的QT平臺上的服務端傳送一個字元命令,由於是隻傳送一個字元,這裡我儘可能簡化socket通訊的過程以供後人參考。 文中貼上主要程式碼,末尾會給出完整原始碼的下載。

Android Messenger程序間客戶服務傳遞資料

開發十年,就只剩下這套架構體系了! >>>   

HttpClient請求服務介面資料Get與Post請求

public static void main(String[] args) { //String url = "http://10.3.1.32/proxy_services/MDMConsumerProxyService"; String url = "http

Android 解析服務Json資料

文章目錄 1、簡介 1、簡介 通過網路訪問 ,獲取到服務端上Json 資料,然後對Json 資料進行解析,得到需要的資料。 待續····· 檔案參考: android 解析網

服務效能測試總結

  幾個基本注意點 1.功能首先要保證介面處理資料的正確性 2.對併發性是有要求的 3.伺服器在併發壓力的時候一些效能數值 關注的指標: 功能業務指標:響應時間(RT)、併發數、介面成功率、吞吐量(QPS/TPS)等等 硬體資源指標:記憶體、CPU、Nerwor

微信小程式向服務請求資料

荊軻刺秦王 微信的文件有說明: 具體用法: getdata: function () {//定義函式名稱 var that = this; // 這個地方非常重要,重置data{

Linux服務常用命令總結

Linux檔案處理命令 1.Linux返回上一級目錄的命令 cd ..                  返回上一級目錄 cd ../..         &

JAVA服務通用資料匯入匯出元件V1.0

    工作中經常會遇到對excel這類檔案進行匯入匯出的業務需求, 這些需求其實從根本上看都是對excel的解析處理,因此我特地花了兩天時間寫了一套通用的匯入匯出工具元件,為以後實現這類需求提高效率。當前版本V1.0,原始碼地址:https://github.

使用AngularJS的$http服務服務進行資料互動

$http服務是基於$q服務的,提供了promise封裝,它接受一個配置物件引數,並返回一個promise物件。同時,它還提供了2個方法用來定義Promise回撥:success 和 error。 var promise = $http({method:"GET",

Java 通過httpClient Post方式提交xml,並從服務返回資料

在通過http請求連線服務端程式時,有兩種方式httpClient這個不是標準的java庫,但是是開源專案,能夠快捷的開發,但如果做Android的開發,推薦使用httpUrlConnect這個工具。但是httpClient確實也是一個比較好用的工具。 這裡面

網路遊戲《叢林戰爭》開發與學習之(二):粘包分包現象以及服務解析資料

1. 粘包和分包 粘包和分包是利用Socket在TCP協議下內部的優化機制。粘包指的是傳送資料比較頻繁,但資料量較少,此時客戶端不會直接將資料包傳送給伺服器,而是會與其它的資料包進行一個結合,例如遊戲中的位置資訊就是屬於頻繁傳送但資料量小的資訊,此時如果每條資料都S