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

Qt下Tcp套接字(socket)通信的整個流程

這篇具有很好參考價值的文章主要介紹了Qt下Tcp套接字(socket)通信的整個流程。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一、QT如果要進行網(wǎng)絡(luò)編程首先需要在.pro中添加如下代碼:

QT += network

二、QT下的TCP通信過程

Qt中提供的所有的Socket類都是非阻賽的
Qt中常用的用于socket通信的套接字類
????????QTcpServer
用于TCP/IP通信,作為服務(wù)器端套接字使用
????????QTcpSocket
用于TCP/IP通信,作為客戶端套接字使用。
????????QUdpSocket
用于UDP通信,服務(wù)器,客戶端均使用此套接字

三、描述Qt下Tcp通信的整個流程?

服務(wù)器端:

1. 創(chuàng)建用于監(jiān)聽的套接字?

     //監(jiān)聽套接字
     tcpServer = new QTcpServer(this);


2. 給套接字設(shè)置監(jiān)聽?

    tcpServer->listen(QHostAddress::Any,8888);
    setWindowTitle("服務(wù)器:8888");


3. 如果有連接到來, 監(jiān)聽的套接字會發(fā)出信號newConnected?
4. 接收連接, 通過nextPendingConnection()函數(shù), 返回一個QTcpSocket類型的套接字對象(用于通信)?

    connect(tcpServer,&QTcpServer::newConnection,[=](){
        //取出建立好連接的套接字
        tcpSocket = tcpServer->nextPendingConnection();
    });


5. 使用用于通信的套接字對象通信?
(1). 發(fā)送數(shù)據(jù): write?

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


(2). 接收數(shù)據(jù): readAll/read??

    connect(tcpSocket,&QTcpSocket::readyRead,[=](){
            //從通信套接字中取出內(nèi)容
            QByteArray array = tcpSocket->readAll();
            array = "客戶端;" + array;
            ui->textEditRead->append(array);
        });

客戶端:

1. 創(chuàng)建用于通信的套接字?

    tcpSocket = new QTcpSocket(this);
    setWindowTitle("客戶端");


2. 連接服務(wù)器: connectToHost?

    //獲取服務(wù)器IP和端口
    QString ip = ui->lineEditIP->text();
    qint16 port = ui->lineEditPort->text().toInt();

    //主動與服務(wù)器建立連接
    tcpSocket->connectToHost(QHostAddress(ip),port);

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


3. 連接成功與服務(wù)器通信?
(1).發(fā)送數(shù)據(jù): write?

    //獲取編輯框內(nèi)容
    QString str = ui->textEditWrite->toPlainText();
    //發(fā)送數(shù)據(jù)
    tcpSocket->write(str.toUtf8().data());


(2).接收數(shù)據(jù): readAll/read

    connect(tcpSocket,&QTcpSocket::readyRead,[=](){
       //獲取對方發(fā)送的內(nèi)容
        QByteArray array = tcpSocket->readAll();
        //追加到編輯區(qū)中
        array = "服務(wù)端:" + array;
        ui->textEditRead->append(array);
    });

四、完整代碼

服務(wù)端:

Qt下Tcp套接字(socket)通信的整個流程

?setverwidget.h

#ifndef SERVERWIDGET_H
#define SERVERWIDGET_H

#include <QWidget>
#include <QTcpServer> //監(jiān)聽套接字
#include  <QTcpSocket> //通信套接字

namespace Ui {
class ServerWidget;
}

class ServerWidget : public QWidget
{
    Q_OBJECT

public:
    explicit ServerWidget(QWidget *parent = 0);
    ~ServerWidget();

private slots:
    void on_buttonSend_clicked();

    void on_pushButton_2_clicked();

private:
    Ui::ServerWidget *ui;

    QTcpServer *tcpServer;//監(jiān)聽套接字
    QTcpSocket *tcpSocket;//通信套接字
};

#endif // SERVERWIDGET_H

serverwidget.cpp

#include "serverwidget.h"
#include "ui_serverwidget.h"

ServerWidget::ServerWidget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::ServerWidget)
{
    ui->setupUi(this);
    tcpServer = NULL;
    tcpSocket = NULL;

    //監(jiān)聽套接字
    tcpServer = new QTcpServer(this);
    tcpServer->listen(QHostAddress::Any,8888);
    setWindowTitle("服務(wù)器:8888");
    connect(tcpServer,&QTcpServer::newConnection,[=](){
        //取出建立好連接的套接字
        tcpSocket = tcpServer->nextPendingConnection();

        //獲取對方的IP和端口
        QString ip = tcpSocket->peerAddress().toString();
        qint16 port = tcpSocket->peerPort();
        QString temp = QString("[%1:%2]:連接成功").arg(ip).arg(port);

        ui->textEditRead->setText(temp);

        connect(tcpSocket,&QTcpSocket::readyRead,[=](){
            //從通信套接字中取出內(nèi)容
            QByteArray array = tcpSocket->readAll();
            array = "客戶端;" + array;
            ui->textEditRead->append(array);
        });
    });

}

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

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

void ServerWidget::on_pushButton_2_clicked()
{
    if(NULL == tcpSocket)
    {
        return;
    }
    //主動和客戶端端口連接
    tcpSocket->disconnectFromHost();
    tcpSocket->close();
    tcpSocket = NULL;
}

客戶端:

Qt下Tcp套接字(socket)通信的整個流程文章來源地址http://www.zghlxwxcb.cn/news/detail-497047.html

clientwidget.h

#ifndef CLIENTWIDGET_H
#define CLIENTWIDGET_H

#include <QWidget>
#include <QTcpSocket>//通信套接字

namespace Ui {
class ClientWidget;
}

class ClientWidget : public QWidget
{
    Q_OBJECT

public:
    explicit ClientWidget(QWidget *parent = 0);
    ~ClientWidget();

private slots:
    void on_buttonConnect_clicked();

    void on_buttonSend_clicked();

    void on_buttonClose_clicked();

private:
    Ui::ClientWidget *ui;

    QTcpSocket *tcpSocket;//通信套接字
};

#endif // CLIENTWIDGET_H

clientwidget.cpp

#include "clientwidget.h"
#include "ui_clientwidget.h"
#include <QHostAddress>

ClientWidget::ClientWidget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::ClientWidget)
{
    ui->setupUi(this);

    tcpSocket = NULL;

    tcpSocket = new QTcpSocket(this);
    setWindowTitle("客戶端");

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

    connect(tcpSocket,&QTcpSocket::readyRead,[=](){
       //獲取對方發(fā)送的內(nèi)容
        QByteArray array = tcpSocket->readAll();
        //追加到編輯區(qū)中
        array = "服務(wù)端:" + array;
        ui->textEditRead->append(array);
    });
}

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

void ClientWidget::on_buttonConnect_clicked()
{
    //獲取服務(wù)器IP和端口
    QString ip = ui->lineEditIP->text();
    qint16 port = ui->lineEditPort->text().toInt();

    //主動與服務(wù)器建立連接
    tcpSocket->connectToHost(QHostAddress(ip),port);
}

void ClientWidget::on_buttonSend_clicked()
{
    //獲取編輯框內(nèi)容
    QString str = ui->textEditWrite->toPlainText();
    //發(fā)送數(shù)據(jù)
    tcpSocket->write(str.toUtf8().data());
    ui->textEditWrite->setText("");
}

void ClientWidget::on_buttonClose_clicked()
{
    //主動和對方斷開連接
    tcpSocket->disconnectFromHost();
    tcpSocket->close();
}

到了這里,關(guān)于Qt下Tcp套接字(socket)通信的整個流程的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • python3套接字編程之socket和socketserver(TCP和UDP通信)

    python3套接字編程之socket和socketserver(TCP和UDP通信)

    socket和socketserver是python3中socket通信模塊,關(guān)于其使用做如下總結(jié)。 目錄 1.socket 1.1模塊引入 1.2套接字獲取 1.3套接字接口 1.3.1 服務(wù)端 1.3.2 客戶端套接字函數(shù) 1.3.3 公共套接字函數(shù) 1.3.4 面向鎖的套接字方法 1.3.5 面向文件的套接字的函數(shù) 2.socketserver 3.TCP 3.1 socket類型TCP 3.2 sockets

    2024年02月15日
    瀏覽(33)
  • 「網(wǎng)絡(luò)編程」第二講:網(wǎng)絡(luò)編程socket套接字(三)_ 簡單TCP網(wǎng)絡(luò)通信程序的實現(xiàn)

    「網(wǎng)絡(luò)編程」第二講:網(wǎng)絡(luò)編程socket套接字(三)_ 簡單TCP網(wǎng)絡(luò)通信程序的實現(xiàn)

    「前言」文章是關(guān)于網(wǎng)絡(luò)編程的socket套接字方面的,上一篇是網(wǎng)絡(luò)編程socket套接字(二),下面開始講解!? 「歸屬專欄」網(wǎng)絡(luò)編程 「主頁鏈接」個人主頁 「筆者」楓葉先生(fy) 「楓葉先生有點文青病」「每篇一句」 I?do?not?know?where?to?go,but?I?have?been?on?the?road. 我不知

    2024年02月11日
    瀏覽(29)
  • 「網(wǎng)絡(luò)編程」第二講:socket套接字(四 - 完結(jié))_ Linux任務(wù)管理與守護進程 | TCP協(xié)議通訊流程

    「網(wǎng)絡(luò)編程」第二講:socket套接字(四 - 完結(jié))_ Linux任務(wù)管理與守護進程 | TCP協(xié)議通訊流程

    「前言」文章是關(guān)于網(wǎng)絡(luò)編程的socket套接字方面的,上一篇是網(wǎng)絡(luò)編程socket套接字(三),這篇續(xù)上篇文章的內(nèi)容,下面開始講解!? 「歸屬專欄」網(wǎng)絡(luò)編程 「主頁鏈接」個人主頁 「筆者」楓葉先生(fy) 「楓葉先生有點文青病」「句子分享」 Time?goes?on?and?on,?never?to?an?

    2024年02月10日
    瀏覽(47)
  • 【Java】網(wǎng)絡(luò)編程與Socket套接字、UDP編程和TCP編程實現(xiàn)客戶端和服務(wù)端通信

    【Java】網(wǎng)絡(luò)編程與Socket套接字、UDP編程和TCP編程實現(xiàn)客戶端和服務(wù)端通信

    為什么需要網(wǎng)絡(luò)編程? 現(xiàn)在網(wǎng)絡(luò)普及程序越來越高,網(wǎng)絡(luò)上保存著我們?nèi)粘I钪行枰母鞣N資源,使用程序通過網(wǎng)絡(luò)來獲取這些資源的過程就需要網(wǎng)絡(luò)編程來實現(xiàn)。 什么是網(wǎng)絡(luò)編程? 網(wǎng)絡(luò)編程,指網(wǎng)絡(luò)上的主機,通過不同的進程以程序的方式實現(xiàn)網(wǎng)絡(luò)通信(網(wǎng)絡(luò)數(shù)據(jù)傳輸)

    2024年02月17日
    瀏覽(90)
  • 網(wǎng)卡收發(fā)包系統(tǒng)結(jié)構(gòu)收發(fā)包流程,tcp/ip協(xié)議,socket套接字緩沖區(qū),滑動窗口,mtu/mss

    網(wǎng)卡收發(fā)包系統(tǒng)結(jié)構(gòu)收發(fā)包流程,tcp/ip協(xié)議,socket套接字緩沖區(qū),滑動窗口,mtu/mss

    MTU和MSS的區(qū)別 TCP 的 MTU MSS MTU是在數(shù)據(jù)鏈路層的載荷大小也就是傳給網(wǎng)絡(luò)層的大小,mss是在傳輸層的載荷大小也就是傳給應(yīng)用層的大小 mss是根據(jù)mtu得到的 1、MTU: Maximum Transmit Unit,最大傳輸單元,即物理接口(數(shù)據(jù)鏈路層)提供給其上層(通常是IP層)最大一次傳輸數(shù)據(jù)的大

    2024年02月08日
    瀏覽(19)
  • 套接字通信(附帶單線程TCP套接字通信代碼)

    套接字通信(附帶單線程TCP套接字通信代碼)

    1. 概念 1.1 局域網(wǎng)和廣域網(wǎng) 局域網(wǎng)(LAN)和廣域網(wǎng)(WAN)是兩種不同范圍的計算機網(wǎng)絡(luò),它們用于連接多臺計算機以實現(xiàn)數(shù)據(jù)共享和通信。 局域網(wǎng)(LAN): 定義: 局域網(wǎng)是一個較小范圍內(nèi)的網(wǎng)絡(luò),通常限定在某個地理區(qū)域,比如一個辦公室、學(xué)校或者家庭。 范圍: LAN 的范

    2024年01月21日
    瀏覽(18)
  • 14.10 Socket 套接字選擇通信

    14.10 Socket 套接字選擇通信

    對于網(wǎng)絡(luò)通信中的服務(wù)端來說,顯然不可能是一對一的,我們所希望的是服務(wù)端啟用一份則可以選擇性的與特定一個客戶端通信,而當不需要與客戶端通信時,則只需要將該套接字掛到鏈表中存儲并等待后續(xù)操作,套接字服務(wù)端通過多線程實現(xiàn)存儲套接字和選擇通信,可以提

    2024年02月08日
    瀏覽(19)
  • 【IPC通信--socket套接字--心跳包】

    隨著網(wǎng)絡(luò)通信技術(shù)的不斷發(fā)展,網(wǎng)絡(luò)通信已成為我們?nèi)粘9ぷ骱蜕钪胁豢苫蛉钡囊徊糠?。但是在使用網(wǎng)絡(luò)通信的過程中,時常會遇到網(wǎng)絡(luò)延遲、丟包等問題,這些問題不僅影響我們的工作和生活效率,也會給我們的網(wǎng)絡(luò)帶來一定的風險和安全隱患。為了解決這些問題,Soc

    2024年01月22日
    瀏覽(18)
  • 【網(wǎng)絡(luò)】socket——預(yù)備知識 | 套接字 | UDP網(wǎng)絡(luò)通信

    【網(wǎng)絡(luò)】socket——預(yù)備知識 | 套接字 | UDP網(wǎng)絡(luò)通信

    ??作者:一只大喵咪1201 ??專欄:《網(wǎng)絡(luò)》 ??格言: 你只管努力,剩下的交給時間! 在前面本喵對網(wǎng)絡(luò)的整體輪廓做了一個大概的介紹,比如分層,協(xié)議等等內(nèi)容,現(xiàn)在我們直接進入socket(套接字)編程,先來感受到網(wǎng)絡(luò)編程。 我們知道,在網(wǎng)絡(luò)通信中,存在兩套地址,一

    2024年02月13日
    瀏覽(21)
  • C語言 進程通訊 socket套接字(TCP/UDP)示例

    C語言 進程通訊 socket套接字(TCP/UDP)示例

    主機字節(jié)序(host-byte):指處理器存儲數(shù)據(jù)的字節(jié)順序,分兩種 ? ? ? ? 大端存儲(big-endian):低地址存儲數(shù)據(jù)高位(符合書寫規(guī)則),由ARM、Motorola等采用 ? ? ? ? 小端存儲(little-endian):低地址存儲數(shù)據(jù)低位(將數(shù)據(jù)不重要的部分保存在低地址,重要的部分保存在高地

    2024年02月05日
    瀏覽(18)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包