欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

QT TCP實(shí)現(xiàn)簡(jiǎn)單的通信示例

 更新時(shí)間:2022年08月22日 09:01:39   作者:Licht小粉  
這篇文章主要為大家詳細(xì)介紹了QT TCP簡(jiǎn)單的通信示例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

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

TCP服務(wù)端:

第一步: 創(chuàng)建監(jiān)聽(tīng)套接字的QTcpSever

QTcpServer *m_tsTcpServer;

第二步: listen------監(jiān)聽(tīng)是否有新的連接進(jìn)來(lái)

int iMyport;如果有新的客戶端連接的話,會(huì)觸發(fā)信號(hào)newConnection(),定義一個(gè)槽函數(shù)接收連接好的套接字.

//監(jiān)聽(tīng)的端口號(hào)
iMyport = iPort;
//判斷是否接收到了新的連接
if(m_tsTcpServer->listen(QHostAddress::Any,iMyport))
? ? {
? ? ? ? connect(m_tsTcpServer,SIGNAL(newConnection()),this,SLOT(slotServerNewConnection()));
? ? }
? ? else
? ? {
? ? ? ? qDebug() << "server listen error";
? ? }

第三步: 取出套接字

QTcpSocket *m_tsTcpSocket; 如果客戶端有消息進(jìn)來(lái)的話,會(huì)觸發(fā)信號(hào)readyRead();斷開(kāi)連接的話會(huì)觸發(fā)disconnected();

//獲得連接客戶端的SOCKET套接字
m_tsTcpSocket = m_tsTcpServer->nextPendingConnection();

//獲取對(duì)方的IP和端口
QString sIp = m_tsTcpSocket->peerAddress().toString();
quint16 sPort = m_tsTcpSocket->peerPort();
qDebug() << sIp << sPort;

connect(m_tsTcpSocket,SIGNAL(readyRead()),this,SLOT(slotServerReadData()));
connect(m_tsTcpSocket, SIGNAL(disconnected()), this, SLOT(slotServerDisConnection()));

第四步: 讀取套接字的內(nèi)容

//從socket中讀出數(shù)據(jù)
QByteArray baArray = m_tsTcpSocket->readAll();
QString sMsg = baArray;

到此服務(wù)端簡(jiǎn)單的通信搭建就完成了.

TCP客戶端:

第一步: 創(chuàng)建套接字,與服務(wù)端的IP地址和端口號(hào)連接.注:這里的端口號(hào)和上面服務(wù)端綁定的那個(gè)端口號(hào)是一樣的,別搞錯(cuò)了.

//連接服務(wù)端
m_tsTcpSocket->connectToHost(sIP,iPort);
//成功連接返回true,錯(cuò)誤返回false
if(m_tsTcpSocket->waitForConnected())
? ? {
? ? ? ? qDebug() << "connect success";
? ? }
? ? //成功連接會(huì)觸發(fā)槽函數(shù) 如果在找在這個(gè)槽函數(shù)里寫(xiě)write的話只能寫(xiě)一次,所以可以等連接成功后自己把寫(xiě)的函數(shù)放在自己想要發(fā)送的模塊
? ? //connect(m_tsTcpSocket,SIGNAL(connected()),this,SLOT(slotConnectedSuccess()));

第二步: 連接成功后就可以直接向服務(wù)端發(fā)消息了.

QString str;
int iSize = m_tsTcpSocket->write(str.toUtf8().data());//返回字節(jié)的大小
//等待write寫(xiě)完再寫(xiě)下一次的write
? ? if(!m_tsTcpSocket->waitForBytesWritten(50000))
? ? {
? ? ? ? return;
? ? }
? ? //判斷發(fā)送是否成功
? ? if(iSize ==-1)
? ? {
? ? ? ? qDebug() << "write error";
? ? ? ? return;
? ? }

到此客戶端的簡(jiǎn)單通信就搭建好了.

若要多次向服務(wù)端發(fā)消息,可以while循環(huán)或者是其他.在這里要注意如果要多次發(fā)消息的話,waitForBytesWritten()這個(gè)函數(shù)是必不可少的,不然多次的話可能通信會(huì)失敗.

注:write()函數(shù)和被觸發(fā)的讀的readyRead()信號(hào)并不是一一對(duì)應(yīng)的,比如可能你客戶端write了三次,服務(wù)端那邊的readyRead可能才被觸發(fā)一次.

想要了解詳細(xì)的原因可以自己再去了解.

同理服務(wù)端向客服端發(fā)消息的話直接發(fā)送就可,服務(wù)端要收消息的話也是直接讀就好,因?yàn)檫B接已經(jīng)成功了.
相信小聰明腦袋瓜的你能懂的.

補(bǔ)充:客戶端主動(dòng)斷開(kāi)服務(wù)的連接

void TcpClient::disConnectSever()
{
? ? //方式一
? ? m_tcpSocket->flush();
? ? m_tcpSocket->disconnectFromHost();
? ??
? ? //方式二
? ? m_tcpSocket->abort();
}

注:方式二abort與方式一的區(qū)別:abort中止當(dāng)前連接并重置套接字。與disConnectFromHost()不同,該函數(shù)會(huì)立即關(guān)閉套接字,丟棄寫(xiě)緩沖區(qū)中的所有掛起數(shù)據(jù)。

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

相關(guān)文章

  • C++實(shí)現(xiàn)簡(jiǎn)單職工管理系統(tǒng)

    C++實(shí)現(xiàn)簡(jiǎn)單職工管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C++職工管理系統(tǒng)實(shí)訓(xùn)代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-04-04
  • C語(yǔ)言遞歸系列的深入總結(jié)

    C語(yǔ)言遞歸系列的深入總結(jié)

    這篇文章主要給大家總結(jié)介紹了關(guān)于C語(yǔ)言遞歸系列的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • C語(yǔ)言程序的編譯與預(yù)處理詳解

    C語(yǔ)言程序的編譯與預(yù)處理詳解

    這篇文章主要介紹了C語(yǔ)言程序的編譯與預(yù)處理,包括介紹了C和C++混合編程的情況,需要的朋友可以參考下,希望能夠給你帶來(lái)幫助
    2021-10-10
  • 詳解C語(yǔ)言結(jié)構(gòu)體中的char數(shù)組如何賦值

    詳解C語(yǔ)言結(jié)構(gòu)體中的char數(shù)組如何賦值

    這篇文章主要給大家介紹了關(guān)于C語(yǔ)言結(jié)構(gòu)體中的char數(shù)組如何賦值的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2022-03-03
  • C++中DeviceIoCteatol的用法實(shí)例

    C++中DeviceIoCteatol的用法實(shí)例

    這篇文章主要介紹了C++中DeviceIoCteatol的用法實(shí)例,對(duì)于學(xué)習(xí)C++針對(duì)硬件的操作有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2014-10-10
  • c++中虛函數(shù)的實(shí)現(xiàn)詳解

    c++中虛函數(shù)的實(shí)現(xiàn)詳解

    眾所周知探索c++對(duì)象內(nèi)部的實(shí)現(xiàn)是一件非常有趣的事情,虛函數(shù)在c++中的實(shí)現(xiàn)機(jī)制就是用虛表和虛指針,但是具體是怎樣的呢?下面這篇文章就來(lái)給大家實(shí)際檢驗(yàn)一下 Visual Studio 2013 編譯器在無(wú)優(yōu)化條件下,虛函數(shù)的實(shí)現(xiàn)。有需要的朋友們可以參考借鑒,下面來(lái)一起看看吧。
    2016-12-12
  • C++?opencv圖像處理實(shí)現(xiàn)圖片邊緣檢測(cè)示例

    C++?opencv圖像處理實(shí)現(xiàn)圖片邊緣檢測(cè)示例

    這篇文章主要為大家介紹了C++?opencv實(shí)現(xiàn)圖片邊緣檢測(cè)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • C++類和對(duì)象之封裝詳解

    C++類和對(duì)象之封裝詳解

    大家好,本篇文章主要講的是C++類和對(duì)象之封裝詳解,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • C++ POSIX API超詳細(xì)分析

    C++ POSIX API超詳細(xì)分析

    這篇文章主要介紹了C++ POSIXAPI的使用方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧
    2022-11-11
  • C++將音頻PCM數(shù)據(jù)封裝成wav文件的方法

    C++將音頻PCM數(shù)據(jù)封裝成wav文件的方法

    這篇文章主要為大家詳細(xì)介紹了C++將音頻PCM數(shù)據(jù)封裝成wav文件的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01

最新評(píng)論