1. 程式人生 > >14 QT TCP網路程式設計與網路聊天室的實現

14 QT TCP網路程式設計與網路聊天室的實現

網路裝置:用於遠端的計算機間的通訊.

每個網路裝置都有一個ip地址. ip地址用於區分一個區域網內不同的計算機, ip地址在同一個區域網內不可以重複使用(如重複使用會兩個都連不了網), ip地址可由路由器動態分配,也可以手動指定.

網路掩碼用於指定所屬的區域網的ip地址範圍。 “255.255.255.0”就是表示最高的24位為1(xxx.xxx.xxx.0 ~ xxx.xxx.xxx.255). “255”就是0xff, 8位都為1.

埠號. 在同一個計算機系統裡所有的程序都是共用一個網絡卡進行網路訪問, 程序的資料就由不同的埠號來區分的(埠號從0~65535). 一個埠號只能給一個程序使用,但一個程序可以使用多個埠號.

/////////////////////////////////////////////////////////
tcp是網路通訊協議之一.

它是可靠的(不容易丟資料),順序的(接收時收到的資料順序也是按發出的資料順序來的),基於連線的網路通訊協議.

基於連線: tcp程式設計通過分成伺服器端與客戶端, 伺服器端(網站)和客戶端(個人pc).
在伺服器端,每個客戶端的通訊都要有一個專用通訊, 而且客戶端只能與伺服器端通訊,不能直接與其它客戶端通訊。
   如要實現客戶端間的通訊, 需要由伺服器端來轉發.
  

在QT裡, tcp程式設計需用到兩個類: QTcpServer, QTcpSocket

伺服器端:

    //1.  建立一個QTcpServer物件
QTcpServer *server = new QTcpServer; //2. 呼叫物件的listen函式成員進行繫結地址與埠號, 並監聽埠 server->listen(QHostAddress::Any, 9999); // 繫結埠號9999, 成功返回true, 失敗返回false // 3. 連線物件的newConnection訊號到一個槽函式,用於處理客戶端的連線。 connect(server, SIGNAL(newConnection()), this, SLOT(new_client())); //當有客戶端連線時,物件會發出newConnection訊號,客戶端的連線處理就在觸發的槽函式new_client裡處理了。
// 4. 在處理客戶端連線的槽函式new_client裡處理連線. 每個客戶端連線上來後,在伺服器端就會有一個QTcpSocket物件對一個客戶端通訊使用,如多個客戶端連線上來,則會有多個QTcpSocket物件. QTcpSocket *client; client = server->nextPendingConnection(); //處理客戶端連線, 呼叫此處理函式後,會得到一個QTcpSocket物件的地址,此物件專用於這個連線上來的客戶端通訊使用。 // QTcpSocket物件在伺服器端用於與客戶端通訊使用,當客戶端發資料到伺服器端時,它會發出訊號readyRead, 通知接收客戶端的資料. 當客戶端斷開連線時,會發出disconnected訊號,通知客戶端已斷線.傳送資料則呼叫物件的write函式即可. //連線訊號,做相應的處理 connect(client, SIGNAL(readyRead()), this, SLOT(tcp_read())); // tcp_read槽函式用於接收客戶端的資料, 在槽函式裡呼叫QTcpSocket物件的read函式即可. connect(client, SIGNAL(disconnected()), this, SLOT(lost_client())); // lost_client槽函式用於處理客戶端斷開連線

客戶端:

    // 1. 建立QTcpSocket物件
       QTcpSocket *tcp = new QtcpSocket;

    // 2. 連線伺服器端的IP地址與埠號, 連線成功會發出connected訊號。也可以直接呼叫waitForConnected等待連線的結果。 
    tcp->connectToHost("192.168.250.250", 9999);

    // 3. 呼叫物件的read/write函式即可與伺服器端進行收發資料了。當伺服器端有發資料過來時,會發出readyRead訊號,在連線此訊號的槽函式裡接收資料即可.

網路聊天室的技術要點:

因在伺服器端每個客戶端連線,都會產生一個QTcpSocket物件用於與對應的客戶端通訊。而客戶端個數是不確定的,所以可以用QList<QTcpSocket *>的連結串列存放每個物件的地址。

群發的實現:
接收到客戶端發過來的內容後,遍歷連結串列,給每個客戶端傳送同一份內容即可。

相關推薦

14 QT TCP網路程式設計網路聊天實現

網路裝置:用於遠端的計算機間的通訊. 每個網路裝置都有一個ip地址. ip地址用於區分一個區域網內不同的計算機, ip地址在同一個區域網內不可以重複使用(如重複使用會兩個都連不了網), ip地址可由路由器動態分配,也可以手動指定. 網路掩碼用於指定所屬的區域

Java網路程式設計:簡單聊天機器人實現案例

整個小案例:整合了Java socket程式設計、jdbc知識(ORM/DAO) 建立資料庫和表,準備表資料(MySQL) 首先建立一個數據庫android 然後建立一個表dictionary,欄位: id int receive varc

qt TCP網路程式設計聊天實現

先看執行效果:首先啟動伺服器:使用者後臺資料捕獲之後登陸A使用者(假設要給B使用者發訊息):輸入接受/傳送方AB,然後連線服務,類似登陸也可以只輸入傳送方,即自身name,接收方隨時可以更改,但發訊息時

網路程式設計網路通訊是什麼——UDPTCP的區別

      首先,補充一下其他的知識,會更加方便了解。      OSI模型:是ISO(國際標準化組織)組織在1985年研究的網路互聯模型,推薦所有公司使用這個規範來控制網路。這樣所有公司都有相同的規範,就能互聯了。  

嵌入式Linux網路程式設計網路基礎,OSI七層模型,TCP/IP四層模型,TCP/IP通訊模型、協議結構、封包拆包,TCP/UDP協議特點及適用情況

文章目錄 1,TCP協議分成了兩個不同的協議----->TCP/IP協議誕生 2,網路的體系結構 2.1,OSI開放系統互聯模型 2.2,TCP/IP協議族的體系結構 3,TCP/IP協議通訊模型 3.1

網路程式設計多執行緒的應用--基於socket udp編寫一個簡單聊天程式

void CChatDlg::OnBnClickedButtonSend() {// TODO: Add your control notification handler code here//獲取對方IPCIPAddressCtrl* pIPAddress = ((CIPAddressCtrl*)GetD

python_day26__socket網路程式設計之簡易聊天

真的是好久沒有寫部落格了,或者說是好久沒有去學python了,可能最近導師和師姐那邊的壓力比較大吧,但是最近看開了,我只要完成你們的任務,我就可以去學我想要學的物件了啊自己累不累的,也想清楚了,不要在華別人的眼光吧,簡簡單單的做自己就好了,都無所謂的,那麼接下來加油吧,#Author:'haijing'

Java學習筆記之--------網路程式設計之Socket通訊----聊天實現

Socket通訊 網路上的兩個程式通過一個雙向的通訊連線實現資料的交換,這個連線的一端稱為一個socket。基於TCP/IP協議,建立穩定的點對點的通訊。 特點:實時、快速、安全性高、佔用系統資源多、效率低。 通常也稱作"套接字",套接字是一種程序間的資料交換機制。這些程序既可以在同一機

深入Java網路程式設計NIO(二)

Java NIO 與 Netty NIO NIO的特性/NIO與IO區別: 1)IO是面向流的,NIO是面向緩衝區的; 2)IO流是阻塞的,NIO流是不阻塞的; 3)NIO有選擇器,而IO沒有。 讀資料和寫資料方式: 從通道進行資料讀取 :建立一個緩衝區,然後請求通道讀取資料。

Java網路程式設計NIO

1. 計算機網路程式設計基礎 1.七層模型 七層模型(OSI,Open System Interconnection參考模型),是參考是國際標準化組織制定的一個用於計算機或通訊系統間互聯的標準體系。它是一個七層抽象的模型,不僅包括一系列抽象的術語和概念,也包括具體的協議。 經典的描述如下:

嵌入式Linux網路程式設計網路基礎,TCP程式設計,socket(),bind(),listen(),accept(),connect(),send()/recv(),close()/shutdown()

文章目錄 1,建立socket檔案描述符socket() 2, 繫結bind() 2.1, 地址相關的資料結構struct sockaddr、struct sockaddr_in、struct in_addr 3,把主動套接字變成被動

學習筆記(六) 網路程式設計資料處理

廢話不多說啦,我們直接學習Android中最常使用的網路技術。 在請求網路之前,我們需要在AndroidManifest中宣告訪問網路的許可權: uses-permission android:name="android.permission.INTER

Android學習五 網路程式設計handler訊息機制

      Android中許多應用需要從網路上獲取內容,而如何從網路上獲取內容,這就需要用到網路程式設計的知識。下面是Android中關於網路程式設計的一些知識。 一、使用httpURLConnection物件訪問網路     使用UrlConnection請求一個url

網路通訊、網路協議網路程式設計

參考書籍:(我只是一個知識搬運工,把知識點總結了起來。) [1] 金鬆河,王捷,黃永麗.Java程式設計經典課堂[M].北京:北京大學出版社,2014年8月第1版:323-326 [2] 謝均,謝希仁.計算機網路教程[M].北京:人民郵電出版社,2014年9月第4版:23-

linux網路程式設計之用select函式實現io複用(基於TCP)引發的思考

1、基本概念    IO多路複用是指核心一旦發現程序指定的一個或者多個IO條件準備讀取,它就通知該程序。IO多路複用適用如下場合:   (1)當客戶處理多個描述字時(一般是互動式輸入和網路套介面),必須使用I/O複用。   (2)當一個客戶同時處理多個套介面時,而這種情況

Java網路程式設計NIO詳解4:淺析NIO包中的Buffer、Channel 和 Selector

Java NIO:Buffer、Channel 和 Selector轉自https://www.javadoop.com/post/nio-and-aio本文將介紹 Java NIO 中三大元件 Buffer、Channel、Selector 的使用。本來要一起介紹非阻塞 I

Python網路程式設計網路通訊模型、tcp/ip協議簇)

OSI參考模型ISO(InternationalOrganization for Standardization,國際標準化組織),是一個全球性的非政府組織,是國際標準化領域中一個十分重要的組織。為了更好的使網路應用更為普及,ISO就推出了OSI(Open SystemInt

深入淺出網路程式設計Swoole核心

在阿里雲PHP技術沙龍專場中,阿里雲邀請到php-nsq作者,pecl、Swoole開發組成員吳振宇分享了Swoole程序模型的原

49.Qt-網路程式設計之QTCPSocket和QTCPServer(實現簡易網路除錯助手)

在上章 48.QT-網路通訊講解1,我們學習了網路通訊基礎後,本章便來實戰一篇.原始碼正在整理中,等下貼地址. PS:支援客戶端和伺服器,提供原始碼,並且伺服器支援多客戶端連入,並且可以指定與個別客戶端傳送資料,也可以給所有連入的客戶端傳送資料. 1.效果圖所下所示:   如下圖所

Java網路程式設計NIO詳解2:JAVA NIO 一步步構建I/O多路複用的請求模型

微信公眾號【黃小斜】作者是螞蟻金服 JAVA 工程師,專注於 JAVA 後端技術棧:SpringBoot、SSM全家桶、MySQL、分散式、中介軟體、微服務,同時也懂點投資理財,堅持學習和寫作,相信終身學習的力量!關注公眾號後回覆”架構師“即可領取 Java基礎、進階、專案和架構師等免費學習資料,更有資料