最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

基于 Qt 的 TCP 網(wǎng)絡(luò)通信

2023-05-30 17:19 作者:鋼廠小霸王_X  | 我要投稿

TCP通信特點:

TCP 是一個面向連接的,安全的,流式傳輸協(xié)議,這個協(xié)議是一個傳輸層協(xié)議。

  • 面向連接:是一個雙向連接,通過三次握手完成,斷開連接需要通過四次揮手完成。

  • 安全:tcp 通信過程中,會對發(fā)送的每一數(shù)據(jù)包都會進行校驗,如果發(fā)現(xiàn)數(shù)據(jù)丟失,會自動重傳

  • ?流式傳輸:發(fā)送端和接收端處理數(shù)據(jù)的速度,數(shù)據(jù)的量都可以不一致。

UDP 是一個面向無連接的,不安全的,報式傳輸協(xié)議,同樣也是一個傳輸層協(xié)議。



大致流程為:TCP服務器端建立套接字,然后進行綁定和監(jiān)聽,接著等待客戶端的連接請求。如果連接成功會得到一個用于通信的文件描述符,用這個描述符進行讀寫操作,通信完成斷開連接。對于TCP客戶端的話就相對簡單一些,只需要創(chuàng)建通信套接字,然后通過服務器的IP和端口進行連接,連接成功進行通信操作,最后斷開連接。

下面是基于QT的TCP通信

Qt 提供了兩個類來進行TCP 的套接字通信:

QTcpServer:服務器類,用于監(jiān)聽客戶端連接以及和客戶端建立連接。

QTcpSocket:通信的套接字類,客戶端、服務器端都需要使用。

這兩個套接字通信類都屬于網(wǎng)絡(luò)模塊 network。

常用 API 函數(shù):

1.????? QTcpServer

構(gòu)造函數(shù)

給套接字設(shè)置監(jiān)聽

每次有新連接可用時都會發(fā)出 newConnection () 信號

在通過QTcpSocket *QTcpServer::nextPendingConnection()來獲取用于通信的文件描述符

2.????? QTcpSocket

QTcpSocket 是一個套接字通信類,不管是客戶端還是服務器端都需要使用。在 Qt 中發(fā)送和接收數(shù)據(jù)也屬于 IO 操作(網(wǎng)絡(luò) IO)。

構(gòu)造函數(shù)

連接服務器,需要指定服務器端綁定的IP和端口信息(兩種都可以)

在 Qt 中不管調(diào)用讀操作函數(shù)接收數(shù)據(jù),還是調(diào)用寫函數(shù)發(fā)送數(shù)據(jù),操作的對象都是本地的由 Qt 框架維護的一塊內(nèi)存。因此,調(diào)用了發(fā)送函數(shù)數(shù)據(jù)不一定會馬上被發(fā)送到網(wǎng)絡(luò)中,調(diào)用了接收函數(shù)也不是直接從網(wǎng)絡(luò)中接收數(shù)據(jù),關(guān)于底層的相關(guān)操作是不需要使用者來維護的。

接收數(shù)據(jù)

// 將當前可用操作數(shù)據(jù)全部讀出,通過返回值返回讀出的字符串

發(fā)送數(shù)據(jù)

// 發(fā)送參數(shù)指定的字符串

在使用 QTcpSocket 進行套接字通信的過程中,如果該類對象發(fā)射出 readyRead() 信號,說明對端發(fā)送的數(shù)據(jù)達到了,之后就可以調(diào)用 read 函數(shù)接收數(shù)據(jù)了。

調(diào)用 connectToHost() 函數(shù)并成功建立連接之后發(fā)出 connected() 信號

在套接字斷開連接時發(fā)出 disconnected() 信號

QT具體通信流程

服務器端:

  1. 創(chuàng)建套接字服務器 QTcpServer 對象

  2. 通過 QTcpServer 對象設(shè)置監(jiān)聽,即:QTcpServer::listen()

  3. 基于 QTcpServer::newConnection() 信號檢測是否有新的客戶端連接

  4. 如果有新的客戶端連接調(diào)用 QTcpSocket *QTcpServer::nextPendingConnection() 得到通信的套接字對象

  5. 使用通信的套接字對象 QTcpSocket 和客戶端進行通信

頭文件:

.cpp文件

客戶端

  1. 創(chuàng)建通信的套接字類 QTcpSocket 對象

  2. 使用服務器端綁定的 IP 和端口連接服務器 QAbstractSocket::connectToHost()

  3. 使用 QTcpSocket 對象和服務器進行通信

頭文件:

.cpp文件


基于 Qt 的 TCP 網(wǎng)絡(luò)通信的評論 (共 條)

分享到微博請遵守國家法律
阿拉善左旗| 东乡族自治县| 禄丰县| 饶平县| 昭平县| 虎林市| 阿坝县| 高邑县| 宣城市| 枣庄市| 桂平市| 昌宁县| 凉城县| 彰武县| 于都县| 上蔡县| 惠来县| 两当县| 保定市| 兴和县| 瑞昌市| 定远县| 马鞍山市| 天柱县| 类乌齐县| 秦安县| 昆明市| 韶关市| 泰安市| 浦东新区| 翁牛特旗| 文水县| 同心县| 西安市| 安塞县| 望城县| 湖州市| 前郭尔| 平乐县| 姜堰市| 托里县|