精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

成人无码精品1区2区3区免费看| 一区二区三区四区视频在线观看| 国产一级二级毛片| 亚洲人成精品久久久| 欧美在线免费播放| 日本xxxxx18| 青青草免费观看免费视频在线| 日韩影院精彩在线| 欧美精品手机在线| 国产 欧美 在线| 看亚洲a级一级毛片| 精品毛片网大全| 艳色歌舞团一区二区三区| 内射无码专区久久亚洲| 日韩成人dvd| 国产69精品久久久久9| 欧美日韩国产黄色| 欧美韩一区二区| 欧美一个色资源| 老头吃奶性行交视频| 国内小视频在线看| 国产精品国产馆在线真实露脸 | 亚洲性无码av在线| xxxxwww一片| 久久麻豆视频| 色综合天天综合狠狠| av在线播放天堂| 国产写真视频在线观看| 亚洲国产精品t66y| 日本高清一区| 欧美18xxxxx| 99久久久久久| 国产亚洲精品自在久久| 性做久久久久久久| 激情综合色丁香一区二区| 国产精品第二页| 久久人妻免费视频| 国产日韩一区二区三区在线| 久久久在线视频| 国产黄在线免费观看| 91视频综合| 中国人与牲禽动交精品| 性欧美精品中出| 亚洲日本三级| 日韩黄色av网站| 亚洲一级av无码毛片精品| 波多野结衣欧美| 日韩欧美123| xxxxwww一片| 国产精品调教视频| 亚洲精品久久久久国产| avtt香蕉久久| 一个色免费成人影院| 精品呦交小u女在线| 97人妻精品一区二区免费| 九九久久成人| 一区二区三区无码高清视频| 69xxx免费| 影视一区二区| 欧美寡妇偷汉性猛交| 久久中文字幕无码| 一区二区三区福利| 清纯唯美亚洲综合| 欧美一级黄视频| 久久99蜜桃精品| 99九九视频| 日本免费网站在线观看| 91老师国产黑色丝袜在线| 欧美性色黄大片人与善| 99青草视频在线播放视| 国产精品国产馆在线真实露脸| 亚洲 欧洲 日韩| 日本无删减在线| 欧美午夜精品伦理| 最新天堂中文在线| 国产视频一区二区在线播放| 精品久久久久久久人人人人传媒| 中文字幕一区二区人妻电影丶| 日韩免费电影在线观看| 在线播放精品一区二区三区 | 日韩电影免费网址| 久久久成人的性感天堂| 国产在线观看免费视频今夜| 久久久精品五月天| 91久久精品日日躁夜夜躁国产| 午夜精品久久久久久久99热黄桃| 91在线高清观看| 亚洲午夜在线观看| 日韩av官网| 在线亚洲一区观看| 97免费公开视频| 午夜精品影视国产一区在线麻豆| 日韩视频在线免费观看| 国产乡下妇女做爰毛片| 奇米色一区二区| 国产成人精品一区二区三区福利| 国产在线视频资源| 一区二区视频在线看| 韩国日本在线视频| 久久丁香四色| 国产亚洲精品久久久久久牛牛 | 欧美freesex交免费视频| 91福利视频网| 精品国自产在线观看| 久久久久久免费| 无码人妻精品一区二区蜜桃百度| 日韩免费电影| 亚洲精品一区二区三区香蕉 | 蝌蚪视频在线播放| 亚洲乱码国产乱码精品精98午夜| 免费国产成人av| 欧美丝袜美腿| 欧美美女操人视频| 亚洲在线视频播放| 国产日韩欧美激情| 日本十八禁视频无遮挡| 日韩中文字幕无砖| 久久人体大胆视频| 成人黄色三级视频| 久久蜜桃av一区二区天堂| 日本在线xxx| 亚洲国产aⅴ精品一区二区| 日韩中文字幕精品| 国产偷人爽久久久久久老妇app | 日本不卡视频在线| 激情视频一区二区| 美女尤物在线视频| 日韩无一区二区| www.5588.com毛片| 久久99久久久欧美国产| 亚洲精品一区二区三区蜜桃久 | 国产精品www994| 成人a在线视频| gogogo高清在线观看免费完整版| 欧美日韩中文字幕综合视频 | 中文字幕在线观看不卡视频| 精品免费国产一区二区| 欧美精美视频| 欧美最猛性xxxxx(亚洲精品)| 亚洲国产日韩在线观看| 亚洲精品乱码久久久久| 国产不卡的av| 欧美激情综合| 91嫩草免费看| 日本高清在线观看| 精品免费99久久| 国产午夜久久久| 成人ar影院免费观看视频| 轻点好疼好大好爽视频| 荡女精品导航| 97碰在线观看| 免费国产在线观看| 在线观看亚洲一区| 国产aaaaaaaaa| 国产呦萝稀缺另类资源| 国产精品无码电影在线观看| 成人搞黄视频| 欧美一区亚洲一区| 高清国产福利在线观看| 欧美精品乱人伦久久久久久| 国产精品成人免费观看| 成人午夜激情在线| 欧美 国产 日本| 国产精品一区2区3区| 国产自摸综合网| 羞羞污视频在线观看| 日韩av最新在线观看| 成年人av网站| 亚洲色图清纯唯美| 中文字幕在线视频播放| 视频一区二区不卡| 综合国产精品久久久| 亚洲一区二区三区免费| 日本高清久久天堂| a√资源在线| 精品剧情v国产在线观看在线| 欧美日韩乱国产| 国产精品久久免费看| 先锋资源在线视频| 99精品国产99久久久久久福利| 视频二区一区| 成人在线tv视频| 国产精品xxxxx| 欧美大片黄色| 国产午夜精品一区二区三区| 国产成人精品亚洲精品色欲| 午夜亚洲福利老司机| 亚洲激情图片网| 白白色亚洲国产精品| 污网站免费在线| 99在线|亚洲一区二区| 在线观看国产一区| 欧美亚洲色图校园春色| 91精品视频在线免费观看| 黄色漫画在线免费看| 色老头一区二区三区在线观看| 欧美天堂在线视频| 欧美日韩国产一级二级| 国产区一区二区三| 亚洲猫色日本管| 一二三四国产精品| av福利精品导航| 手机av在线网站| 快she精品国产999| 日本阿v视频在线观看| 欧美va久久久噜噜噜久久| 久草一区二区| 亚洲成人影音| 91久久国产精品91久久性色| 成人影院入口| 4p变态网欧美系列| 中文字幕免费高清电视剧网站在线观看| 亚洲免费av网址| 日韩在线一区二区三区四区| 欧美精品 日韩| 中文字幕在线观看国产| 欧美性猛交xxxx乱大交蜜桃| 久久久久噜噜噜亚洲熟女综合| 国产精品嫩草99a| 真实乱视频国产免费观看| www.亚洲色图.com| 亚洲午夜久久久久久久久| 激情另类小说区图片区视频区| 99免费视频观看| 国产精品女主播一区二区三区| 成人在线观看毛片| 综合色一区二区| 欧美 日韩 国产 在线观看| 久久香蕉国产| 亚洲欧美日韩另类精品一区二区三区| 美女亚洲一区| 久久久久久草| 香蕉久久夜色精品国产使用方法 | 日韩在线视频免费| 亚洲国产成人精品电影| 亚洲黄色在线播放| 精品国产一区二区在线观看| www.污视频| 日韩三级精品电影久久久| 99久久精品日本一区二区免费| 欧美色综合久久| 91女人18毛片水多国产| 欧美日韩情趣电影| 亚洲一区二区天堂| 91精品蜜臀在线一区尤物| 国产精品色综合| 日韩一区二区三| 亚洲精品国产一区二| 精品嫩草影院久久| 亚洲欧美自偷自拍| 亚洲欧洲高清在线| 成人综合影院| 日韩在线免费视频观看| 国产婷婷视频在线 | 国产对白videos麻豆高潮| 亚洲电影激情视频网站| 日本最新中文字幕| 日韩欧美亚洲国产一区| 天天干天天色综合| 欧美精品日韩综合在线| 亚洲国产综合网| 亚洲国产精品久久91精品| 三级av在线| 日韩最新在线视频| 日本色护士高潮视频在线观看| 午夜精品久久久久久99热软件 | 在线播放日韩| av天堂永久资源网| 久久er精品视频| 亚洲一区和二区| 国产拍欧美日韩视频二区| 欧美手机在线观看| 亚洲va国产天堂va久久en| 销魂美女一区二区| 欧美一区二区三区在线| 六月丁香色婷婷| 国产一区二区三区在线视频| 91最新在线视频| 青青久久av北条麻妃海外网| 亚洲日日夜夜| 精品久久sese| 欧美成人激情| 极品美女扒开粉嫩小泬| 精品中文字幕一区二区| 久草视频福利在线| 中文字幕av一区二区三区| 国产精品第72页| 欧美色区777第一页| 欧美一级淫片免费视频魅影视频| 亚洲视频网站在线观看| 亚洲羞羞网站| 国产精品视频在线播放| 高清精品xnxxcom| 一区二区三区四区不卡| 国产一区二区三区久久久久久久久 | 久久久久久久电影一区| av免费在线一区| 国产欧美一区二区三区另类精品| 欧美日韩第一| 欧美 丝袜 自拍 制服 另类| 国产在线一区观看| 国产 欧美 在线| 亚洲成人动漫在线观看| 一区二区的视频| 亚洲免费中文字幕| 丁香花在线影院| 亚洲一区二区三区成人在线视频精品 | 蜜臀久久99精品久久久久久9| 亚洲啪av永久无码精品放毛片| 国产精品欧美综合在线| 国产亚洲欧美在线精品| 亚洲第一级黄色片| 污污视频在线| 成人免费在线视频网站| 精品久久久久中文字幕小说| 激情深爱综合网| 成人小视频免费在线观看| 大地资源高清在线视频观看| 一本大道av一区二区在线播放| 高潮毛片7777777毛片| 久热在线中文字幕色999舞| 国产精品久久久久久久久久齐齐| 久久婷婷人人澡人人喊人人爽| 欧美激情五月| 中国老熟女重囗味hdxx| 国产精品不卡在线观看| 做爰视频毛片视频| 亚洲人成网站色ww在线| 波多野结衣久久精品| 精品无码久久久久国产| 亚洲精品看片| 中国黄色片视频| 亚洲电影一区二区| 少妇高潮一区二区三区69| 欧美激情一级欧美精品| 成人免费直播在线| www.在线观看av| 成人午夜电影网站| 国产乡下妇女做爰| 亚洲成人在线网| 男人av在线播放| 欧美日韩国产综合在线| 久久www成人_看片免费不卡| 少妇毛片一区二区三区| 欧美视频一区二区三区…| 日本在线视频1区| 国产aaa精品| 欧美色蜜桃97| 在线观看免费不卡av| 亚洲乱码中文字幕| 亚洲国产成人一区二区| 久久久久国产精品免费| 理论片一区二区在线| 国产黄视频在线| 久久精品欧美一区二区三区不卡 | 日韩欧美在线不卡| www红色一片_亚洲成a人片在线观看_| 亚洲一区二区中文字幕| 国产精品av一区二区| 老鸭窝一区二区| 欧美午夜宅男影院| fc2ppv国产精品久久| 国产精品一区二区三区免费观看| 国产日韩欧美| 男女男精品视频网站| 69av一区二区三区| 国产经典三级在线| 欧美日韩高清在线一区| 久久69国产一区二区蜜臀| 一区二区三区免费高清视频| 亚洲国产天堂网精品网站| 日本在线精品| 日韩精品免费一区| 久久久激情视频| 国产黄色一级大片| 欧美在线观看网址综合| 青草国产精品| 911亚洲精选| 欧洲一区二区三区在线| av黄在线观看| 欧美国产视频在线观看| 国产一区二区三区久久久| 国产无码精品在线播放| 日韩在线免费观看视频| 国产精品三p一区二区| 最新天堂中文在线| 精品福利在线视频| 久久久久久久久免费视频| 日本又骚又刺激的视频在线观看| 国产亚洲精品美女| 国产精品亚洲一区二区在线观看| 黄色成人在线看| 国产精品灌醉下药二区| 少妇高潮久久久| 91网站免费看| 亚洲男女自偷自拍| 青娱乐国产盛宴| 日韩在线视频国产| 亚洲精品aaaaa| 日本黄色大片在线观看|