QT5中實現TCP協議簡單通訊

2021-08-30 19:44:46 字數 3926 閱讀 9066

qt版本:qt5.11

其他qt5版本均支援。

1、tcp伺服器建立

首先建立tcpserver工程,涉及到 tcpserver、 tcpclientsocket、server三個檔案和main主檔案,

在tcpserver.pro中新增如下語句:

qt  +=network
1)a、標頭檔案「tcpserver.h」中宣告了需要的各種控制項,tcpserver繼承自qdialog,實現了服務端的對話方塊顯示和控制。

其中具體**如下:

#include#include#include#include#include#include#include"server.h"

class tcpserver:public qdialog

;

b、在原始檔「tcpserver.cpp」中,tcpserver類的建構函式實現窗體個控制項的建立、布局等,具體如下:

#include "tcpserver.h"

tcpserver::tcpserver(qwidget *parent,qt::windowflags f):qdialog(parent,f)

void tcpserver::slotcreateserver()

void tcpserver::updateserver(qstring msg, int length)

介面建立圖如下:

2)a、標頭檔案「tcpclientsocket.h」的建立,tcpclientsocket繼承自qtcpsocket,建立乙個tcp套接字,以便在伺服器端實現與客戶端程式的通訊。

具體**如下:

#include#includeclass tcpclientsocket:public qtcpsocket

;

b、在原始檔「tcpclientsocket.cpp」中,建構函式tcpclientsocket的內容如下:

#include "tcpclientsocket.h"

tcpclientsocket::tcpclientsocket(qobject *parent)

//當有資料到來時,出發datareceived()函式,從套接字中將有效的資料讀出,然後發出updateclients()訊號,

void tcpclientsocket::datareceived()

}//進行關閉訊號

void tcpclientsocket::slotdisconnected()

3)a、標頭檔案「server.h」,server繼承自qtcpserver,實現乙個tcp協議的伺服器。利用qtcpserver,開發者可以監聽到指定埠的tcp連線。具體**如下:

#include#include#include"tcpclientsocket.h"     //  包含tcp套接字

class server:public qtcpserver

;

b、原始檔「server.cpp」,其中具體內容見**中標註(很詳細),**如下:

#include "server.h"

server::server(qobject *parent,int port):qtcpserver(parent)

//當出現乙個新的連線時,qtcpserver出發incomingconnection()函式

void server::incomingconnection(int socketdescriptor)

void server::updateclients(qstring msg, int length)

}}void server::slotdisconnected(int descriptor)

}return ;

}

4)主函式「main.cpp」如下:

比較簡單,不做介紹了。

int main(int argc, char *argv)

2、tcp客戶端建立

首先建立tcpclient工程,涉及到tcpclient和main主檔案,

在tcpclient.pro中加入如下**:

qt+= network
1)a、標頭檔案「tcpclient.h」,其中tcpclient類繼承自qdialog類,宣告了需要的各種控制項,

具體**如下:

#include#include#include#include#include#include#include#includeclass tcpclient:public qdialog

;

b、原始檔「tcpclient.cpp」具體**如下:

#include "tcpclient.h"

#include#includetcpclient::tcpclient(qwidget *parent,qt::windowflags f):qdialog(parent,f)

void tcpclient::slotenter()

username=usernamelineedit->text();

/*建立了乙個qtcpsocket類物件,並將訊號/槽連線起來 */

tcpsocket = new qtcpsocket(this);

connect(tcpsocket,signal(connected()),this,slot(slotconnected()));

connect(tcpsocket,signal(disconnected()),this,slot(slotdisconnected()));

connect(tcpsocket,signal(readyread()),this,slot(datareceived()));

//與tcp伺服器端連線,連線成功後,發出connected()訊號

tcpsocket->connecttohost(*serverip,port);

status=true;

}else

//與伺服器斷開連線,斷開連線後發出disconnected()訊號

tcpsocket->disconnectfromhost();

status=false; //將status狀態復位

}}void tcpclient::slotconnected()

}void tcpclient::slotsend()

qstring msg=username+":"+sendlineedit->text();

tcpsocket->write(msg.tolatin1(),msg.length());

sendlineedit->clear();

}void tcpclient::slotdisconnected()

//當有資料到來時,觸發datareceived()函式,從套接字中將有效資料取出並顯示。

void tcpclient::datareceived()

}

介面如下:

2)主函式「main.cpp」如下:

int main(int argc, char *argv)

3、工作介面如下:

其中,預設的伺服器是 127.0.0.1,可以建立多個客戶端視窗,進行互動。

Qt 5 使用http協議通訊

network access api的一部分,並且這個類包含著在網路上傳送請求的必要資訊。qnetworkaccessmanage返回的乙個物件,請求完成之後,需要刪除該物件 需要乙個mamager物件,做get post qnetworkaccessmanager manager newqnetw...

qt5實現串列埠通訊

源 mainwindow.h ifndef mainwindow h define mainwindow h include include include include mythread.h namespace uiclass mainwindow public qmainwindow endi...

QT5 窗體間通訊

a.h 定義訊號 pragma once include 只有繼承了public qobject類的類,才具有訊號槽的能力。傳送者和接收者都需要是qobject的子類 凡是qobject類 不管是直接子類還是間接子類 都應該在第一行 寫上q object classa public qobject ...