国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Qt專欄】Qt實現(xiàn)TCP服務端和客戶端通信

這篇具有很好參考價值的文章主要介紹了【Qt專欄】Qt實現(xiàn)TCP服務端和客戶端通信。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。


前言

網(wǎng)絡通信是程序員必須會的一項生存技能,這里簡單的實現(xiàn)了服務端和客戶端通信的兩個小示例,代碼可以直接拿來用,開發(fā)環(huán)境是Qt5.9.6。


一、TCP服務端

1.項目架構

qt tcp服務端,Qt,qt,tcp/ip,ui

2.tcpserver.h文件
#ifndef TCPSERVER_H
#define TCPSERVER_H

#include <QWidget>
//添加下面三個頭文件,記得在pro文件里添加 network 模塊
#include <QTcpServer>
#include <QTcpSocket>
#include <QtNetwork>

namespace Ui {
class TCPServer;
}

class TCPServer : public QWidget
{
    Q_OBJECT

public:
    explicit TCPServer(QWidget *parent = nullptr);
    ~TCPServer();
    void initNetwork(QString ip,quint16 port);
    void stopNetwork();

private slots:
    void    onNewConnection();//QTcpServer的newConnection()信號
    void    onConnected();	//可以不添加該接口
    void    onDisconnected();	//可以不添加該接口
    void    onSocketReadyRead();//讀取socket傳入的數(shù)據(jù)

    void on_pushButton_clicked();

private:
    Ui::TCPServer *ui;

    QTcpServer *tcpServer; //TCP服務器
    QTcpSocket *tcpSocket;//TCP通訊的Socket

    QString getLocalIP();//獲取本機IP地址
    void    closeEvent(QCloseEvent *event);
};

#endif // TCPSERVER_H
3.tcpserver.cpp文件
#include "tcpserver.h"
#include "ui_tcpserver.h"

TCPServer::TCPServer(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::TCPServer)
{
    ui->setupUi(this);
    initNetwork(getLocalIP(),55555);    //指定ip地址和監(jiān)聽的端口號
}

TCPServer::~TCPServer()
{
    delete ui;
}

void TCPServer::initNetwork(QString ip, quint16 port)
{
    tcpServer=new QTcpServer(this);
    connect(tcpServer,SIGNAL(newConnection()),this,SLOT(onNewConnection()));

    QHostAddress addr(ip);
    tcpServer->listen(addr,port);
}

void TCPServer::stopNetwork()
{
    if(tcpServer->isListening()){//tcpServer正在監(jiān)聽
        tcpServer->close();;//停止網(wǎng)絡監(jiān)聽
    }
}

void TCPServer::onNewConnection()
{
    tcpSocket = tcpServer->nextPendingConnection(); //創(chuàng)建socket
    connect(tcpSocket,SIGNAL(readyRead()),this,SLOT(onSocketReadyRead()));
    connect(tcpSocket, SIGNAL(connected()),this, SLOT(onConnected()));
    onConnected();
    connect(tcpSocket, SIGNAL(disconnected()),this, SLOT(onDisconnected()));
}

void TCPServer::onConnected()
{
    ui->plainTextEdit->appendPlainText(QStringLiteral("***客戶端連接 ")
                                       +QStringLiteral("ip地址:")+tcpSocket->peerAddress().toString()
                                       +QStringLiteral(" 端口號:")+QString::number(tcpSocket->peerPort())+"***");
}

void TCPServer::onDisconnected()
{
    ui->plainTextEdit->appendPlainText(QStringLiteral("***客戶端斷開連接***"));
}


void TCPServer::onSocketReadyRead()
{
    while(tcpSocket->canReadLine()){
        QByteArray msg = tcpSocket->readLine();
        ui->plainTextEdit->appendPlainText("[客戶端] "+msg);
    }
}

QString TCPServer::getLocalIP()
{
    QString ipString = Q_NULLPTR;
    QHostInfo hostInfo = QHostInfo::fromName(QHostInfo::localHostName());   //從本地主機名稱獲取主機信息
    QList<QHostAddress> listAddr = hostInfo.addresses();    //本地主機ip地址列表(IPV4/IPV6)
    foreach (auto addr, listAddr)
    {
       if((addr.isNull() == false) && (addr.protocol() == QAbstractSocket::IPv4Protocol)
               && (addr != QHostAddress::LocalHost))
       {
           ipString = addr.toString();   //根據(jù)條件篩選出本地IPV4地址
       }
    }
    return ipString;
}

void TCPServer::closeEvent(QCloseEvent *event)
{
    stopNetwork();
    event->accept();
}

void TCPServer::on_pushButton_clicked()
{
    QString msg = ui->lineEdit->text();
    ui->lineEdit->setFocus();//光標回到lineEdit
    if(msg.isEmpty())return;
    ui->lineEdit->clear();
    ui->plainTextEdit->appendPlainText("[服務端] "+msg);

    QByteArray str = msg.toUtf8();
    str.append("\n");
    tcpSocket->write(str);
}
4.測試效果

qt tcp服務端,Qt,qt,tcp/ip,ui

二、TCP客戶端

1.項目架構

qt tcp服務端,Qt,qt,tcp/ip,ui

2.tcpserver.h文件
#ifndef TCPCLIENT_H
#define TCPCLIENT_H

#include <QWidget>
//添加下面兩個頭文件,記得在pro文件里添加 network 模塊
#include    <QTcpSocket>
#include    <QtNetwork>

namespace Ui {
class TCPClient;
}

class TCPClient : public QWidget
{
    Q_OBJECT

public:
    explicit TCPClient(QWidget *parent = nullptr);
    ~TCPClient();
    void initNetwork(QString ip,quint16 port);
    void stopNetwork();

private slots:
//自定義槽函數(shù)
    void    onConnected();	//可以不添加該接口
    void    onDisconnected();	//可以不添加該接口
    void    onSocketReadyRead();//讀取socket傳入的數(shù)據(jù)

    void on_pushButton_clicked();

private:
    Ui::TCPClient *ui;
    QTcpSocket  *tcpClient;  //socket
    QString getLocalIP();//獲取本機IP地址
    void    closeEvent(QCloseEvent *event);
};

#endif // TCPCLIENT_H
3.tcpserver.cpp文件
#include "tcpclient.h"
#include "ui_tcpclient.h"

TCPClient::TCPClient(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::TCPClient)
{
    ui->setupUi(this);
    initNetwork(getLocalIP(),55555);    //指定服務端ip地址和的端口號
}

TCPClient::~TCPClient()
{
    delete ui;
}

void TCPClient::initNetwork(QString ip, quint16 port)
{
    tcpClient=new QTcpSocket(this); //創(chuàng)建socket變量

    connect(tcpClient,SIGNAL(connected()),this,SLOT(onConnected()));
    connect(tcpClient,SIGNAL(disconnected()),this,SLOT(onDisconnected()));
    connect(tcpClient,SIGNAL(readyRead()),this,SLOT(onSocketReadyRead()));

    tcpClient->connectToHost(ip,port);
}

void TCPClient::stopNetwork()
{
    //斷開與服務器的連接
    if (tcpClient->state()==QAbstractSocket::ConnectedState){
        tcpClient->disconnectFromHost();
    }
}

void TCPClient::onConnected()
{
    ui->plainTextEdit->appendPlainText("***已連接到服務器***");
}

void TCPClient::onDisconnected()
{
    ui->plainTextEdit->appendPlainText("***已斷開與服務器的連接***");
}

void TCPClient::onSocketReadyRead()
{
    while(tcpClient->canReadLine()){
        QByteArray msg = tcpClient->readLine();
        ui->plainTextEdit->appendPlainText("[服務端] "+msg);
    }
}

QString TCPClient::getLocalIP()
{
    QString ipString = Q_NULLPTR;
    QHostInfo hostInfo = QHostInfo::fromName(QHostInfo::localHostName());   //從本地主機名稱獲取主機信息
    QList<QHostAddress> listAddr = hostInfo.addresses();    //本地主機ip地址列表(IPV4/IPV6)
    foreach (auto addr, listAddr)
    {
       if((addr.isNull() == false) && (addr.protocol() == QAbstractSocket::IPv4Protocol)
               && (addr != QHostAddress::LocalHost))
       {
           ipString = addr.toString();   //根據(jù)條件篩選出本地IPV4地址
       }
    }
    return ipString;
}

void TCPClient::closeEvent(QCloseEvent *event)
{
    stopNetwork();
    event->accept();
}

void TCPClient::on_pushButton_clicked()
{
    //發(fā)送數(shù)據(jù)
    QString  msg=ui->lineEdit->text();
    ui->lineEdit->setFocus();//光標回到lineEdit
    if(msg.isEmpty())return;
    ui->lineEdit->clear();
    ui->plainTextEdit->appendPlainText("[客戶端] "+msg);

    QByteArray  str=msg.toUtf8();
    str.append('\n');
    tcpClient->write(str);
}
4.測試效果

qt tcp服務端,Qt,qt,tcp/ip,ui


總結

好了,兩個小程序寫完并可以運行進行通信,簡單的實現(xiàn),原理后序會專門寫篇文章,這里可以直接照著上述寫就OK啦,886!文章來源地址http://www.zghlxwxcb.cn/news/detail-522947.html

到了這里,關于【Qt專欄】Qt實現(xiàn)TCP服務端和客戶端通信的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 服務端和客戶端通信-TCP(含完整源代碼)

    服務端和客戶端通信-TCP(含完整源代碼)

    目錄 簡單TCP通信實驗 分析 1、套接字類型 2、socket編程步驟 3、socket編程實現(xiàn)具體思路 實驗結果截圖 程序代碼 實驗設備: ??? 目標系統(tǒng):windows 軟件工具:vs2022/VC6/dev 實驗要求: 完成TCP服務端和客戶端的程序編寫; 實現(xiàn)簡單字符串的收發(fā)功能。 需附上代碼及運行結果截圖

    2024年02月07日
    瀏覽(30)
  • SpringBoot搭建Netty+Socket+Tcp服務端和客戶端

    yml配置:? ? 完成,啟動項目即可自動監(jiān)聽對應端口 這里為了測試,寫了Main方法,可以參考服務端,配置啟動類 ,實現(xiàn)跟隨項目啟動 ? ......想寫就參考服務端...... 有測試的,,,但是忘記截圖了................

    2024年02月15日
    瀏覽(25)
  • QT實現(xiàn)tcp服務器客戶端

    QT實現(xiàn)tcp服務器客戶端

    2024年02月07日
    瀏覽(29)
  • QT實現(xiàn)TCP通信(服務器與客戶端搭建)

    QT實現(xiàn)TCP通信(服務器與客戶端搭建)

    創(chuàng)建一個QTcpServer類對象,該類對象就是一個服務器 調(diào)用listen函數(shù)將該對象設置為被動監(jiān)聽狀態(tài),監(jiān)聽時,可以監(jiān)聽指定的ip地址,也可以監(jiān)聽所有主機地址,可以通過指定端口號,也可以讓服務器自動選擇 當有客戶端發(fā)來連接請求時,該服務器會自動發(fā)射一個newConnection信號

    2024年02月09日
    瀏覽(27)
  • C++實現(xiàn)WebSocket通信(服務端和客戶端)

    C++實現(xiàn)WebSocket通信(服務端和客戶端)

    天行健,君子以自強不息;地勢坤,君子以厚德載物。 每個人都有惰性,但不斷學習是好好生活的根本,共勉! 文章均為學習整理筆記,分享記錄為主,如有錯誤請指正,共同學習進步。 這里單純是個人總結,如需更官方更準確的websocket介紹可百度 websocket是一種即時通訊協(xié)

    2024年02月09日
    瀏覽(19)
  • (二) 用QWebSocket 實現(xiàn)服務端和客戶端(詳細代碼直接使用)

    目錄 前言 一、服務器的代碼: 1、服務器的思路 2、具體服務器的代碼示例 二、客戶端的代碼: 1、客戶端的思路(和服務器類似) 2、具體客戶端的代碼示例 前言 ????????要是想了解QWebSocket的詳細知識,還得移步到上一篇文章: WebSocket 詳解,以及用QWebSocket 實現(xiàn)服務端

    2024年01月20日
    瀏覽(24)
  • WebSocket 詳解,以及用QWebSocket 實現(xiàn)服務端和客戶端(含代碼例子)

    WebSocket 詳解,以及用QWebSocket 實現(xiàn)服務端和客戶端(含代碼例子)

    目錄 前言: 1、WebSocket 誕生背景 2、WebSocket的特點: 3、 WebSocket 簡介 4、WebSocket 優(yōu)點 5、QWebSocket通訊—客戶端: 6、QWebSocket通訊—服務端: 前言: ????????要是對WebSocket 的基本知識都了解了,可以直接移步,實際如何使用這個類 (二) 用QWebSocket 實現(xiàn)服務端和客戶端(

    2024年02月16日
    瀏覽(53)
  • Qt 服務器/客戶端TCP通訊

    Qt 服務器/客戶端TCP通訊

    最近需要用到TCP/IP通訊,這邊就先找個簡單的例程學習一下。Qt的TCP通訊編程可以使用QtNetwork模塊,QtNetwork模塊提供的類能夠創(chuàng)建基于TCP/IP的客戶端與服務端應用程序,一般會使用QTcpSocket、QTcpServer類 網(wǎng)絡通信方式主要有兩種:TCP與UDP。以下拷貝網(wǎng)絡上總結兩者之間的區(qū)別:

    2023年04月26日
    瀏覽(19)
  • (一)WebSocket 詳解,以及用QWebSocket 實現(xiàn)服務端和客戶端(含代碼例子)

    (一)WebSocket 詳解,以及用QWebSocket 實現(xiàn)服務端和客戶端(含代碼例子)

    目錄 前言: 1、WebSocket 誕生背景 2、WebSocket的特點: 3、 WebSocket 簡介 4、WebSocket 優(yōu)點 5、QWebSocket通訊—客戶端: 6、QWebSocket通訊—服務端: 前言: ????????要是對WebSocket 的基本知識都了解了,可以直接移步,實際如何使用這個類 (二) 用QWebSocket 實現(xiàn)服務端和客戶端(

    2024年02月03日
    瀏覽(23)
  • QT TCP客戶端實現(xiàn)

    QT TCP客戶端實現(xiàn)

    QTcpSocket實例首先是通過connectToHost()嘗試連接到服務器,需要指定服務器的IP地址和端口。connectToHost()是異步方式連接服務器,不會阻塞程序運行,連接后發(fā)射connected()信號。 如果需要使用阻塞方式連接服務器,則使用waitForConnected()函數(shù)阻塞程序運行,直到連接成功或失敗。

    2024年02月09日
    瀏覽(28)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包