最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

QT實(shí)現(xiàn)簡單TCP通信

 更新時(shí)間:2022年08月19日 15:18:14   作者:強(qiáng)迫癥高級(jí)患者  
這篇文章主要為大家詳細(xì)介紹了QT實(shí)現(xiàn)簡單的TCP通信,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了QT實(shí)現(xiàn)簡單TCP通信的具體代碼,供大家參考,具體內(nèi)容如下

開發(fā)環(huán)境:win7
開發(fā)軟件:Qt5.5.0
下圖是實(shí)現(xiàn)效果

首先點(diǎn)擊客戶端的connect與服務(wù)器連接,連接成功后再服務(wù)器會(huì)顯示“成功連接”,然后在客戶端會(huì)顯示“成功與服務(wù)器建立連接”,然后我們就可以分別在服務(wù)器和客戶端向?qū)Ψ桨l(fā)送數(shù)據(jù)了。

1 TCP介紹

傳輸控制協(xié)議(TCP,Transmission Control Protocol)是一種面向連接的、可靠的、基于字節(jié)流的傳輸層通信協(xié)議。

在QT中的網(wǎng)絡(luò)編程的過程如下:服務(wù)器有兩個(gè)套接字,一個(gè)負(fù)責(zé)監(jiān)聽(QTcpServer),另一個(gè)負(fù)責(zé)通信(QTcpSocket),而客戶端只有一個(gè)負(fù)責(zé)通信的套接字(QTcpSocket)。

通信過程如下圖:

2 Tcp服務(wù)器實(shí)現(xiàn)

//監(jiān)聽套接字,指定父對(duì)象,讓其自動(dòng)回收空間
tcpServer = new QTcpServer(this);
tcpServer->listen(QHostAddress::AnyIPv4, 6000);

當(dāng)有新的連接建立時(shí),在服務(wù)器界面接收區(qū)處顯示客戶端地址和端口,并且等待數(shù)據(jù)發(fā)送過來,接收并顯示:

connect(tcpServer, &QTcpServer::newConnection,
? ? ? ? ? ? [=](){
? ? ? ? ? ? ? ? //取出建立好連接的套接字
? ? ? ? ? ? ? ? //cout << "有新的客戶端進(jìn)行連接";
? ? ? ? ? ? ? ? tcpSocket = tcpServer->nextPendingConnection();
? ? ? ? ? ? ? ? //獲取對(duì)方的IP和端口
? ? ? ? ? ? ? ? QString ip = tcpSocket->peerAddress().toString();
? ? ? ? ? ? ? ? quint16 port = tcpSocket->peerPort();
? ? ? ? ? ? ? ? QString temp = QString("[%1:%2]:成功連接").arg(ip).arg(port); ? ? ? ?
? ? ? ? ? ? ? ? ui->textEditRead->setText(temp);
? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? connect(tcpSocket, &QTcpSocket::readyRead,
? ? ? ? ? ? ? ? ? ? ? ? [=](){
? ? ? ? ? ? ? ? ? ? ? ? ? ? //cout << "有數(shù)據(jù)從客戶端發(fā)過來";
? ? ? ? ? ? ? ? ? ? ? ? ? ? //從通信套接字取出內(nèi)容
? ? ? ? ? ? ? ? ? ? ? ? ? ? QByteArray array = tcpSocket->readAll();
? ? ? ? ? ? ? ? ? ? ? ? ? ? ui->textEditRead->append(array);
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? );
? ? ? ? ? ? }
? ? ? ? ? ? );
}

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

void ServerWidget::on_buttonSend_clicked()
{
? ? if(NULL == tcpSocket){
? ? ? ? return;
? ? }
? ? //獲取編輯區(qū)內(nèi)容
? ? QString str = ui->textEditWrite->toPlainText();
? ? //給對(duì)方發(fā)送數(shù)據(jù)。使用套接字是tcpSocket
? ? tcpSocket->write(str.toUtf8().data());
}

點(diǎn)擊close按鈕,如果tcpSocket沒有分配內(nèi)存,則退出,否則斷開連接。

void ServerWidget::on_buttonClose_clicked()
{
? ? if(NULL == tcpSocket){
? ? ? ? return;
? ? }
? ? //主動(dòng)和客戶端斷開連接
? ? tcpSocket->disconnectFromHost();
? ? tcpSocket->close();
? ? tcpSocket = NULL;
}

3 TCP客戶端實(shí)現(xiàn)

分配空間,指定父對(duì)象

tcpSocket = new QTcpSocket(this);

如果服務(wù)器發(fā)送連接成功,則客戶端顯示“成功與服務(wù)器建立連接”。

connect(tcpSocket, &QTcpSocket::connected,
? ? ? ? ? ? [=](){
? ? ? ? ? ? ? ? ui->textEditRead->setText("成功與服務(wù)器建立連接");
? ? ? ? ? ? }
? ? ? ? ? ? );

客戶端讀取數(shù)據(jù),并顯示在接收區(qū)

connect(tcpSocket, &QTcpSocket::readyRead,
? ? ? ? ? ? [=](){
? ? ? ? ? ? ? ? //獲取服務(wù)器發(fā)送的內(nèi)容
? ? ? ? ? ? ? ? QByteArray array = tcpSocket->readAll();
? ? ? ? ? ? ? ? ui->textEditRead->append(array);
? ? ? ? ? ? }
? ? ? ? ? ? );

按下connect按鈕,主動(dòng)與服務(wù)器建立連接

void ClientWidget::on_pushButtonConnect_clicked()
{
? ? //獲取服務(wù)器ip和端口
? ? QString ip = ui->lineEditIP->text();
? ? quint16 port = ui->lineEditPort->text().toInt();
? ? //主動(dòng)和服務(wù)器建立連接
? ? tcpSocket->connectToHost(QHostAddress(ip), port);
}

按下send按鈕,發(fā)送數(shù)據(jù),轉(zhuǎn)成utf-8格式

void ClientWidget::on_pushButtonSend_clicked()
{
? ? if(NULL == tcpSocket){
? ? ? ? return;
? ? }
? ? //獲取編輯區(qū)內(nèi)容
? ? QString str = ui->textEditWrite->toPlainText();
? ? //給對(duì)方發(fā)送數(shù)據(jù),使用套接字是tcpSocket
? ? tcpSocket->write(str.toUtf8().data());
}

按下close關(guān)閉連接

void ClientWidget::on_pushButtonClose_clicked()
{
? ? tcpSocket->disconnectFromHost();
? ? tcpSocket->close();
}

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • c++遞歸解數(shù)獨(dú)方法示例

    c++遞歸解數(shù)獨(dú)方法示例

    這篇文章主要介紹了c++遞歸解數(shù)獨(dú)方法示例,需要的朋友可以參考下
    2014-03-03
  • 淺談stringstream 的.str()正確用法和清空操作

    淺談stringstream 的.str()正確用法和清空操作

    下面小編就為大家?guī)硪黄獪\談stringstream 的.str()正確用法和清空操作。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-12-12
  • C/C++中接收return返回來的數(shù)組元素方法示例

    C/C++中接收return返回來的數(shù)組元素方法示例

    return是C++預(yù)定義的語句,它提供了種植函數(shù)執(zhí)行的一種放大,最近學(xué)習(xí)中遇到了相關(guān)return的內(nèi)容,覺著有必要總結(jié)一下,這篇文章主要給大家介紹了關(guān)于C/C++中如何接收return返回來的數(shù)組元素的相關(guān)資料,需要的朋友可以參考下。
    2017-12-12
  • C++調(diào)用C#的DLL實(shí)現(xiàn)方法

    C++調(diào)用C#的DLL實(shí)現(xiàn)方法

    這篇文章主要介紹了C++調(diào)用C#的DLL實(shí)現(xiàn)方法,很有實(shí)用價(jià)值,需要的朋友可以參考下
    2014-07-07
  • C語言 詳細(xì)分析結(jié)構(gòu)體的內(nèi)存對(duì)齊

    C語言 詳細(xì)分析結(jié)構(gòu)體的內(nèi)存對(duì)齊

    C 數(shù)組允許定義可存儲(chǔ)相同類型數(shù)據(jù)項(xiàng)的變量,結(jié)構(gòu)是 C 編程中另一種用戶自定義的可用的數(shù)據(jù)類型,它允許你存儲(chǔ)不同類型的數(shù)據(jù)項(xiàng),本篇讓我們來了解C 的結(jié)構(gòu)體內(nèi)存對(duì)齊
    2022-03-03
  • sublime text3搭建配置c語言編譯環(huán)境的詳細(xì)圖解教程(小白級(jí))

    sublime text3搭建配置c語言編譯環(huán)境的詳細(xì)圖解教程(小白級(jí))

    這篇文章主要介紹了sublime text3搭建配置c語言編譯環(huán)境,詳細(xì)圖解,小白教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-01-01
  • 淺談分詞器Tokenizer

    淺談分詞器Tokenizer

    分詞器的工作就是分解文本流成詞(tokens).在這個(gè)文本中,每一個(gè)token都是這些字符的一個(gè)子序列。一個(gè)分析器(analyzer)必須知道它所配置的字段,但是tokenizer不需要,分詞器(tokenizer)從一個(gè)字符流(reader)讀取數(shù)據(jù),生成一個(gè)Token對(duì)象(TokenStream)的序列
    2021-06-06
  • C++ 標(biāo)準(zhǔn)模板類詳解

    C++ 標(biāo)準(zhǔn)模板類詳解

    今天小編就為大家分享一篇關(guān)于C++標(biāo)準(zhǔn)模板類的介紹與使用講解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2021-09-09
  • C++實(shí)現(xiàn)順序表的常用操作(插入刪出查找輸出)

    C++實(shí)現(xiàn)順序表的常用操作(插入刪出查找輸出)

    實(shí)現(xiàn)順序表的插入,刪除,查找,輸出操作在C語言中經(jīng)常用到。下面小編給大家整理實(shí)現(xiàn)代碼,一起看下吧
    2016-08-08
  • C語言rand和srand函數(shù)使用方法介紹

    C語言rand和srand函數(shù)使用方法介紹

    rand()函數(shù)用來產(chǎn)生隨機(jī)數(shù),但是,rand()的內(nèi)部實(shí)現(xiàn)是用線性同余法實(shí)現(xiàn)的,是偽隨機(jī)數(shù),由于周期較長,因此在一定范圍內(nèi)可以看成是隨機(jī)的。srand()用來設(shè)置rand()產(chǎn)生隨機(jī)數(shù)時(shí)的隨機(jī)數(shù)種子。參數(shù)seed是整數(shù),通常可以利用time(0)或geypid(0)的返回值作為seed
    2023-02-02

最新評(píng)論

封丘县| 辰溪县| 汾阳市| 苗栗县| 清河县| 上蔡县| 西藏| 通州市| 金阳县| 洛扎县| 巨鹿县| 安泽县| 门头沟区| 怀仁县| 南丰县| 青州市| 大足县| 安龙县| 平和县| 肇源县| 勐海县| 房产| 视频| 义马市| 三都| 萝北县| 霍山县| 工布江达县| 东辽县| 文登市| 宝丰县| 博白县| 深圳市| 商河县| 马公市| 汉阴县| 黄平县| 汉源县| 武清区| 丘北县| 调兵山市|