精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Qt TCP協議 傳輸簡單字符串實例

移動開發
TCP協議的程序使用的是客戶端/服務器模式,在Qt中提供了QTcpSocket類來編寫客戶端程序,使用QTcpServer類編寫服務器端程序。

Qt TCP協議 傳輸簡單字符串實例是本文要介紹的內容。TCP即Transmission Control Protocol,傳輸控制協議。與UDP不同,它是面向連接和數據流的可靠傳輸協議。也就是說,它能使一臺計算機上的數據無差錯的發往網絡上的其他計算機,所以當要傳輸大量數據時,我們選用TCP協議。

TCP協議的程序使用的是客戶端/服務器模式,在Qt中提供了QTcpSocket類來編寫客戶端程序,使用QTcpServer類編寫服務器端程序。我們在服務器端進行端口的監聽,一旦發現客戶端的連接請求,就會發出newConnection()信號,我們可以關聯這個信號到我們自己的槽函數,進行數據的發送。而在客戶端,一旦有數據到來就會發出readyRead()信號,我們可以關聯此信號,進行數據的接收。其實,在程序中最難理解的地方就是程序的發送和接收了,為了讓大家更好的理解,我們在這一節只是講述一個傳輸簡單的字符串的例子,在下一節再進行擴展,實現任意文件的傳輸。

一、服務器端。

在服務器端的程序中,我們監聽本地主機的一個端口,這里使用6666,然后我們關聯newConnection()信號與自己寫的sendMessage()槽函數。就是說一旦有客戶端的連接請求,就會執行sendMessage()函數,在這個函數里我們發送一個簡單的字符串

1.我們新建Qt4 Gui Application,工程名為“tcpServer”,選中QtNetwork模塊,Base class選擇QWidget。(說明:如果一些Qt Creator版本沒有添加模塊一項,我們就需要在工程文件tcpServer.pro中添加一行代碼:QT += network)

2.我們在widget.ui的設計區添加一個Label,更改其objectName為statusLabel,用于顯示一些狀態信息。如下:

Qt TCP協議 傳輸簡單字符串實例


 
3.在widget.h文件中做以下更改。

添加頭文件:#include <QtNetWork>

添加private對象:QTcpServer *tcpServer;

添加私有槽函數:

  1. private slots:  
  2. void sendMessage(); 

4.在widget.cpp文件中進行更改。在其構造函數中添加代碼:

  1. tcpServer = new QTcpServer(this);  
  2.     if(!tcpServer->listen(QHostAddress::LocalHost,6666))  
  3.     {  //監聽本地主機的6666端口,如果出錯就輸出錯誤信息,并關閉  
  4.         qDebug() << tcpServer->errorString();  
  5.         close();  
  6.     }  
  7.  connect(tcpServer,SIGNAL(newConnection()),this,SLOT(sendMessage()));  
  8. //連接信號和相應槽函數 

我們在構造函數中使用tcpServer的listen()函數進行監聽,然后關聯了newConnection()和我們自己的sendMessage()函數。下面我們實現sendMessage()函數。

  1. void Widget::sendMessage()  
  2. {  
  3.     QByteArray block; //用于暫存我們要發送的數據  
  4.     QDataStream out(&block,QIODevice::WriteOnly);  
  5.     //使用數據流寫入數據  
  6.     out.setVersion(QDataStream::Qt_4_6);  
  7.     //設置數據流的版本,客戶端和服務器端使用的版本要相同  
  8.     out<<(quint16) 0;  
  9.     out<<tr(“hello Tcp!!!”);  
  10.     out.device()->seek(0);  
  11.     out<<(quint16) (block.size() – sizeof(quint16));  
  12.     QTcpSocket *clientConnection = tcpServer->nextPendingConnection();  
  13.     //我們獲取已經建立的連接的子套接字  
  14.     connect(clientConnection,SIGNAL(disconnected()),clientConnection,  
  15.             SLOT(deleteLater()));  
  16.     clientConnection->write(block);  
  17.     clientConnection->disconnectFromHost();  
  18.     ui->statusLabel->setText(“send message successful!!!”);  
  19.     //發送數據成功后,顯示提示  

這個是數據發送函數,我們主要介紹兩點:

(1)為了保證在客戶端能接收到完整的文件,我們都在數據流的最開始寫入完整文件的大小信息,這樣客戶端就可以根據大小信息來判斷是否接受到了完整的文件。而在服務器端,我們在發送數據時就要首先發送實際文件的大小信息,但是,文件的大小一開始是無法預知的,所以我們先使用了out<<(quint16) 0;在block的開始添加了一個quint16大小的空間,也就是兩字節的空間,它用于后面放置文件的大小信息。然后out<<tr(“hello Tcp!!!”);輸入實際的文件,這里是字符串。當文件輸入完成后我們在使用out.device()->seek(0);返回到block的開始,加入實際的文件大小信息,也就是后面的代碼,它是實際文件的大小:out<<(quint16) (block.size() – sizeof(quint16));

(2)在服務器端我們可以使用tcpServer的nextPendingConnection()函數來獲取已經建立的連接的Tcp套接字,使用它來完成數據的發送和其它操作。比如這里,我們關聯了disconnected()信號和deleteLater()槽函數,然后我們發送數據

  1. clientConnection->write(block); 

然后是clientConnection->disconnectFromHost();它表示當發送完成時就會斷開連接,這時就會發出disconnected()信號,而最后調用deleteLater()函數保證在關閉連接后刪除該套接字clientConnection。

5.這樣服務器的程序就完成了,我們先運行一下程序。

Qt TCP協議 傳輸簡單字符串實例

 

 

 

#p#
 
二、客戶端。

我們在客戶端程序中向服務器發送連接請求,當連接成功時接收服務器發送的數據。

1.我們新建Qt4 Gui Application,工程名為“tcpClient”,選中QtNetwork模塊,Base class選擇QWidget。

2,我們在widget.ui中添加幾個標簽Label和兩個Line Edit以及一個按鈕Push Button。

Qt TCP協議 傳輸簡單字符串實例
 
其中“主機”后的Line Edit的objectName為hostLineEdit,“端口號”后的為portLineEdit。“收到的信息”標簽的objectName為messageLabel 。

3.在widget.h文件中做更改。

添加頭文件:#include <QtNetwork>

添加private變量:

  1. QTcpSocket *tcpSocket;  
  2. QString message;  //存放從服務器接收到的字符串  
  3. quint16 blockSize;  //存放文件的大小信息 

添加私有槽函數:

  1. private slots:  
  2.     void newConnect(); //連接服務器  
  3.     void readMessage();  //接收數據  
  4. void displayError(QAbstractSocket::SocketError);  //顯示錯誤 

4.在widget.cpp文件中做更改。

(1)在構造函數中添加代碼:

  1. tcpSocket = new QTcpSocket(this);  
  2. connect(tcpSocket,SIGNAL(readyRead()),this,SLOT(readMessage()));  
  3. connect(tcpSocket,SIGNAL(error(QAbstractSocket::SocketError)),  
  4.          this,SLOT(displayError(QAbstractSocket::SocketError))); 

這里關聯了tcpSocket的兩個信號,當有數據到來時發出readyRead()信號,我們執行讀取數據的readMessage()函數。當出現錯誤時發出error()信號,我們執行displayError()槽函數。

(2)實現newConnect()函數。

  1. void Widget::newConnect()  
  2. {  
  3.     blockSize = 0; //初始化其為0  
  4.     tcpSocket->abort(); //取消已有的連接  
  5.     tcpSocket->connectToHost(ui->hostLineEdit->text(),  
  6.                              ui->portLineEdit->text().toInt());  
  7.     //連接到主機,這里從界面獲取主機地址和端口號  

這個函數實現了連接到服務器,下面會在“連接”按鈕的單擊事件槽函數中調用這個函數。

(3)實現readMessage()函數。

  1. void Widget::readMessage()  
  2. {  
  3.     QDataStream in(tcpSocket);  
  4.     in.setVersion(QDataStream::Qt_4_6);  
  5.     //設置數據流版本,這里要和服務器端相同  
  6.     if(blockSize==0) //如果是剛開始接收數據  
  7.     {  
  8.         //判斷接收的數據是否有兩字節,也就是文件的大小信息  
  9.         //如果有則保存到blockSize變量中,沒有則返回,繼續接收數據  
  10.         if(tcpSocket->bytesAvailable() < (int)sizeof(quint16)) return;  
  11.         in >> blockSize;  
  12.     }  
  13.     if(tcpSocket->bytesAvailable() < blockSize) return;  
  14.     //如果沒有得到全部的數據,則返回,繼續接收數據  
  15.     in >> message;  
  16.     //將接收到的數據存放到變量中  
  17.     ui->messageLabel->setText(message);  
  18.     //顯示接收到的數據  

這個函數實現了數據的接收,它與服務器端的發送函數相對應。首先我們要獲取文件的大小信息,

  1. void Widget::displayError(QAbstractSocket::SocketError)  
  2. {  
  3.     qDebug() << tcpSocket->errorString(); //輸出錯誤信息  

然后根據文件的大小來判斷是否接收到了完整的文件。

(4)實現displayError()函數。

這里簡單的實現了錯誤信息的輸出。

(5)我們在widget.ui中進入“連接”按鈕的單擊事件槽函數,然后更改如下。

  1. void Widget::on_pushButton_clicked() //連接按鈕  
  2. {  
  3.     newConnect(); //請求連接  

這里直接調用了newConnect()函數。

5.我們運行程序,同時運行服務器程序,然后在“主機”后填入“localhost”,在“端口號”后填入“6666”,點擊“連接”按鈕,效果如下。

Qt TCP協議 傳輸簡單字符串實例
 
可以看到我們正確地接收到了數據。因為服務器端和客戶端是在同一臺機子上運行的,所以我這里填寫了“主機”為“localhost”,如果你在不同的機子上運行,需要在“主機”后填寫其正確的IP地址。

小結:Qt TCP協議傳輸簡單字符串實例,到這里我們最簡單的TCP應用程序就完成了,在下一節我們將會對它進行擴展,實現任意文件的傳輸。

責任編輯:zhaolei 來源: 互聯網
相關推薦

2010-06-17 17:48:05

TCP傳輸控制協議

2023-02-09 08:43:11

SwiftGo字符串

2010-06-09 16:28:50

TCP IP傳輸協議

2010-06-09 13:54:13

TCP傳輸協議

2010-06-17 23:21:16

TCP傳輸控制協議

2013-05-27 10:48:16

TCPUDP傳輸協議

2010-06-13 15:32:57

TCP協議

2010-06-09 13:21:30

TCP傳輸層協議

2009-08-26 13:24:54

C#字符串

2010-06-13 14:49:40

TCP IP協議優化

2010-03-03 09:12:25

.NET字符串拘留池

2010-09-13 15:06:40

sql server字

2011-06-16 17:01:21

Qt MeeGo 排序

2021-10-11 10:41:14

TCP傳輸層協議網絡

2009-09-01 17:41:53

C#截取字符串函數

2020-08-31 19:19:27

TCPUDP視屏面試

2019-08-15 07:43:38

TCP網絡協議丟包

2009-08-21 14:25:23

C#異步傳輸字符串

2020-05-13 12:17:33

RedisC字符C語言

2009-08-21 14:33:15

C#異步傳輸字符串
點贊
收藏

51CTO技術棧公眾號

美女爆乳18禁www久久久久久 | 国产视频aaa| 色综合色综合| 欧美tk—视频vk| 国产麻花豆剧传媒精品mv在线| 91.xxx.高清在线| 成人在线视频一区二区| 国产精品激情av在线播放| 中国一级片在线观看| 欧美日韩一区二区三区不卡视频| 欧美视频日韩视频在线观看| 成人国产在线看| 欧美18xxxxx| 高清不卡一区二区| 国产精品久久久久久av| 国产精品6666| 先锋资源久久| 一本一本久久a久久精品牛牛影视| 又黄又爽又色的视频| 春暖花开亚洲一区二区三区| 樱桃视频在线观看一区| 日本欧洲国产一区二区| 黄色av免费观看| 久久se精品一区精品二区| 91精品国产91久久久| 永久久久久久久| 欧美色蜜桃97| 亚洲精品一区在线观看香蕉| 国产精久久久久| 日日夜夜亚洲精品| 欧美亚洲日本国产| 欧美丰满熟妇bbbbbb百度| 五月天激情在线| 中文字幕日韩av资源站| 丝袜美腿玉足3d专区一区| 五月天福利视频| 成人精品免费看| 91视频最新| 99精品在线看| 九色综合狠狠综合久久| 国产精品激情av在线播放| 四虎成人在线观看| 亚洲专区一区| 欧美在线亚洲在线| 国产成人无码精品| 亚洲免费在线| 欧美一级电影在线| 久久国产视频一区| 免费在线欧美黄色| 欧洲美女免费图片一区| 男人天堂2024| 日韩福利电影在线| 国产啪精品视频网站| 中文字幕+乱码+中文乱码www| 三级在线观看一区二区| 日本精品va在线观看| 国产又粗又爽视频| 久久久久.com| 国产精品美女久久| 国产口爆吞精一区二区| 激情欧美一区二区三区在线观看| 91精品视频免费| 国产精品一区二区免费视频| 国产在线视频一区二区| 亚洲一区二区三区视频| 精品人妻一区二区三区麻豆91| 国产美女主播视频一区| 99国产高清| 熟妇人妻系列aⅴ无码专区友真希| 波多野结衣一区二区三区| 国产一区二区三区四区hd| 色视频在线观看| 国产偷国产偷精品高清尤物| 亚洲日本无吗高清不卡| 国产精品va在线观看视色| 亚洲伊人伊色伊影伊综合网| 日本wwww视频| 亚洲男人在线| 亚洲精品久久久久久久久久久久| 国产精品无码电影| 成人毛片免费看| 久久av红桃一区二区小说| 九九热精品免费视频| 先锋影音久久| 国产一区视频在线| 免费观看成年人视频| 久久精品一区二区三区四区| 992tv成人免费观看| av老司机在线观看| 欧美色图12p| 丰满岳乱妇一区二区| 俺要去色综合狠狠| 国内精品久久久| 中文在线免费看视频| 国产丶欧美丶日本不卡视频| 欧美污视频久久久| 很黄的网站在线观看| 精品久久久中文| 日韩成人精品视频在线观看| 日韩伦理一区二区三区| 日韩视频在线免费| 成人午夜淫片100集| 国产呦萝稀缺另类资源| 久久亚洲高清| caoporn免费在线视频| 欧美日韩亚洲网| 久久久久亚洲av片无码v| 亚洲综合小说图片| 欧美疯狂xxxx大交乱88av| 欧美男人天堂网| 成人晚上爱看视频| 在线无限看免费粉色视频| 最近在线中文字幕| 欧美大片一区二区| 女人18毛片毛片毛片毛片区二| 亚洲神马久久| 国产精华一区二区三区| 日本最黄一级片免费在线| 疯狂蹂躏欧美一区二区精品| 日本r级电影在线观看| 成人在线丰满少妇av| 欧美一级电影免费在线观看| 亚洲精品无遮挡| 亚洲视频在线一区观看| 亚洲最大综合网| 婷婷精品在线观看| 韩国美女主播一区| 丰满人妻熟女aⅴ一区| 国产精品丝袜在线| 日韩有码免费视频| 天堂在线精品| 欧美亚洲免费电影| 日韩有码第一页| 亚洲一区成人在线| 免费观看污网站| 女人色偷偷aa久久天堂| 91免费欧美精品| 日本福利在线| 欧美日韩精品一区视频| 日韩不卡av在线| 日韩成人免费在线| 小说区图片区图片区另类灬| 欧美亚洲韩国| 亚洲午夜小视频| 福利网址在线观看| 国产亚洲精品7777| 国产天堂在线播放| 青青草原综合久久大伊人精品| 国产成人久久精品| 风间由美一区| 欧美三级电影一区| 亚洲一区电影在线观看| 蜜臀精品一区二区三区在线观看| 色一情一乱一伦一区二区三欧美 | 在线一区二区视频| 国产一级久久久久毛片精品| 日韩电影在线免费| 一区二区三区视频在线播放| 成人亚洲精品| 欧美国产亚洲视频| 婷婷开心激情网| 色综合色狠狠综合色| 荫蒂被男人添免费视频| 香蕉久久a毛片| 先锋影音亚洲资源| 国产精品一区免费在线| 欧美激情亚洲精品| 美女毛片在线看| 精品视频一区 二区 三区| 成人免费视频国产免费观看| 福利一区在线观看| 播放灌醉水嫩大学生国内精品| 国产精品一区二区99| 国产日韩欧美成人| 国产啊啊啊视频在线观看| 日韩精品在线观看视频| 在线永久看片免费的视频| 中文字幕欧美三区| 久久久久无码精品| 久久九九电影| 日本老太婆做爰视频| 欧美精品中文字幕亚洲专区| 国产精品久久91| 羞羞污视频在线观看| 亚洲国产精品中文| 自拍偷拍福利视频| 亚洲国产aⅴ天堂久久| 一区二区三区伦理片| 国内精品在线播放| 91好吊色国产欧美日韩在线| 欧美黄色大片在线观看| 国产精品一区二区三区在线观 | 日本www在线观看视频| 欧美成人精品1314www| 亚洲欧美一二三区| 亚洲精选一二三| 在线免费观看日韩av| 精品亚洲欧美一区| 成人小视频在线看| 午夜日韩av| 无码免费一区二区三区免费播放| 综合视频一区| 国产人妖伪娘一区91| 欧美一级鲁丝片| 欧美成人合集magnet| 国产色在线 com| 亚洲第一av在线| 国产精品无码天天爽视频| 欧美视频裸体精品| 久久久精品视频在线| 国产精品日产欧美久久久久| 97香蕉碰碰人妻国产欧美| 国产在线日韩欧美| 日本xxxx黄色| 久久天堂成人| 日韩欧美一区二| 国内激情久久| 色乱码一区二区三区熟女 | 成人黄色av电影| 在线免费看污网站| 毛片一区二区三区| 50路60路老熟妇啪啪| 亚洲精品欧洲| 美女黄色免费看| 欧美国产激情| eeuss中文| 天天操综合网| 久久av秘一区二区三区| 久久免费av| 亚洲国产精品www| 成人在线视频免费观看| 日韩av电影免费观看| 午夜a一级毛片亚洲欧洲| 国产一区精品视频| 卡通动漫精品一区二区三区| 成人在线观看91| 9l视频自拍九色9l视频成人| 97超碰最新| 久久伊人影院| av一区二区三区免费| 日韩精品成人在线观看| 91亚洲精品久久久久久久久久久久| 亚洲人体在线| 国产一区玩具在线观看| 四虎精品永久免费| 成人福利在线视频| 国产日韩在线观看视频| 亚洲www在线观看| 欧美激情三级| av一本久道久久波多野结衣| 国产精品18hdxxxⅹ在线| 国产经典一区二区三区| 青青草这里只有精品| 久久久久久久有限公司| 综合伊思人在钱三区| 欧洲精品亚洲精品| 成人精品久久| 日韩不卡一二区| 国产精品vip| 噜噜噜久久亚洲精品国产品麻豆| 另类亚洲自拍| 91极品视频在线观看| 韩国v欧美v日本v亚洲v| 在线观看一区二区三区四区| 99久久精品国产导航| 日韩在线免费观看av| 国产精品污污网站在线观看 | 伊人久久大香线| av动漫在线播放| 国产日韩欧美三级| 粉色视频免费看| 成人一区二区三区中文字幕| 中文字幕一区二区三区人妻电影| 欧美国产禁国产网站cc| 国产高潮国产高潮久久久91| 亚洲国产综合人成综合网站| 亚洲成熟少妇视频在线观看| 日韩一级片网站| 香蕉视频成人在线| 日韩在线观看免费| 激情av在线| 国产精品青青在线观看爽香蕉 | 国产成人久久久久| 婷婷综合五月天| 中文字幕人妻色偷偷久久| 日韩精品专区在线| 黄色影院在线播放| 欧美精品一区三区| 日韩免费电影| 91免费在线视频网站| 夜色77av精品影院| 91视频成人免费| 久久影院亚洲| 成人三级做爰av| 欧美国产日产图区| 日韩手机在线观看| 欧美日韩大陆一区二区| 四虎免费在线观看| 另类天堂视频在线观看| 中文字幕一区久| 成人区精品一区二区| 日韩一区三区| 九色在线视频观看| 国产精品12区| 91ts人妖另类精品系列| 精品日本美女福利在线观看| 国产女同91疯狂高潮互磨| 亚洲天堂2020| 一本大道色婷婷在线| **亚洲第一综合导航网站| 欧美久久综合网| 草草久久久无码国产专区| 成人性生交大片| 欧美激情图片小说| 欧美日韩一区三区四区| 神马久久精品| 高清欧美性猛交xxxx| 精品国产18久久久久久二百| 亚洲精品人成| 日日摸夜夜添夜夜添精品视频| 污污污www精品国产网站| 一区二区视频免费在线观看| 中文字幕在线观看第二页| 亚洲天堂av在线免费| 妞干网免费在线视频| 国产美女精品在线观看| 欧美精品aa| 深爱五月综合网| 最新高清无码专区| 97人妻精品一区二区三区动漫| 伊人久久男人天堂| 日韩一区二区三区在线免费观看 | 国产小视频在线观看| 97在线观看视频| 欧美亚洲色图校园春色| 男女日批视频在线观看| 成年人网站91| 91精品国产乱码久久久张津瑜| 欧美成人免费网站| 国产精品69xx| 国产在线精品二区| 99国产精品久久久久久久成人热| 韩国三级hd两男一女| 午夜精品福利久久久| 日韩在线观看视频网站| 91精品国产精品| 欧美**vk| 538任你躁在线精品免费| 国产精品久久三| 国产男男gay体育生白袜| 欧美成人免费全部| 极品束缚调教一区二区网站 | 久久久久久久久久91| 欧美岛国在线观看| www成人免费观看| 欧美一区二区综合| 麻豆高清免费国产一区| 侵犯稚嫩小箩莉h文系列小说| 日韩一级欧美一级| 男人久久天堂| 视频在线观看成人| 国产一区二区美女| 亚洲黄色一区二区| 亚洲深夜福利视频| 台湾天天综合人成在线| 国产午夜精品视频一区二区三区| 成人av免费观看| 无码人妻熟妇av又粗又大| 最近2019年中文视频免费在线观看| 国产精品一区二区美女视频免费看| 日本大片免费看| 久久精品夜色噜噜亚洲aⅴ| 国产一区二区在线视频聊天| 九九精品视频在线| 精品在线手机视频| 热久久久久久久久| 亚洲成精国产精品女| 国产在线黄色| 99国精产品一二二线| 午夜亚洲福利在线老司机| 91精品国自产在线| 精品成a人在线观看| 国产69精品久久久久按摩| 青青青在线观看视频| 久久久久亚洲蜜桃| 国产xxxx在线观看| 日本久久久久久久久久久| 2023国产精品久久久精品双| 久久久久国产精品区片区无码| 欧美精品在线一区二区三区| 超碰在线公开| 中文字幕成人一区| 久久综合成人精品亚洲另类欧美 | 久久亚洲国产精品尤物| 欧美日韩福利在线| 国产精品青草久久| 深夜福利视频一区| 亚洲综合中文字幕在线观看| 三级欧美韩日大片在线看| 久草中文在线视频|