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

Qt多線程TCP服務(wù)器客戶端傳輸文件

這篇具有很好參考價值的文章主要介紹了Qt多線程TCP服務(wù)器客戶端傳輸文件。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。


TCP的理論知識

TCP的特點:

  1. TCP是面向連接的運輸層協(xié)議。應(yīng)用程序在使用TCP協(xié)議之前,必須先建立TCP連接。在傳送數(shù)據(jù)完畢后,必須釋放已經(jīng)建立的TCP連接。
  2. 每一條TCP連接只能有兩個端點,每一條TCP連接只能是點對點的(一對一)。
  3. TCP提供可靠交付的服務(wù)。通過TCP 連接傳送的數(shù)據(jù),無差錯、不丟失、不重復(fù),并且按序到達(dá)。
  4. TCP提供全雙工通信。TCP允許通信雙方的應(yīng)用進(jìn)程在任何時候都能發(fā)送數(shù)據(jù)。TCP連接的兩端都設(shè)有發(fā)送緩存和接受緩存,用來臨時存放雙向通信的數(shù)據(jù)。
  5. 面向字節(jié)流。TCP中的"流"指的是流入到進(jìn)程或從進(jìn)程流出的字節(jié)序列。

滿足這些特點的規(guī)定

  1. 數(shù)據(jù)分片:在發(fā)送端對用戶數(shù)據(jù)進(jìn)行分片,在接收端進(jìn)行重組,由TCP確定分片的大小并控制分片和重組;
  2. 到達(dá)確認(rèn):接收端接收到分片數(shù)據(jù)時,根據(jù)分片數(shù)據(jù)序號向發(fā)送端發(fā)送一個確認(rèn);
  3. 超時重發(fā):發(fā)送方在發(fā)送分片時啟動超時定時器,如果在定時器超時之后沒有收到相應(yīng)的確認(rèn),重發(fā)分片;
  4. 滑動窗口:TCP連接每一方的接收緩沖空間大小都固定,接收端只允許另一端發(fā)送接收端緩沖區(qū)所能接納的數(shù)據(jù),TCP在滑動窗口的基礎(chǔ)上提供流量控制,防止較快主機(jī)致使較慢主機(jī)的緩沖區(qū)溢出;
  5. 失序處理:作為IP數(shù)據(jù)報來傳輸?shù)腡CP分片到達(dá)時可能會失序,TCP將對收到的數(shù)據(jù)進(jìn)行重新排序,將收到的數(shù)據(jù)以正確的順序交給應(yīng)用層;
  6. 重復(fù)處理:作為IP數(shù)據(jù)報來傳輸?shù)腡CP分片會發(fā)生重復(fù),TCP的接收端必須丟棄重復(fù)的數(shù)據(jù);
  7. 數(shù)據(jù)校驗:TCP將保持它首部和數(shù)據(jù)的檢驗和,這是一個端到端的檢驗和,目的是檢測數(shù)據(jù)在傳輸過程中的任何變化。如果收到分片的檢驗和有差錯,TCP將丟棄這個分片,并不確認(rèn)收到此報文段導(dǎo)致對端超時并重發(fā)。

多線程的知識點

多線程(multithreading),是指從軟件或者硬件上實現(xiàn)多個線程并發(fā)執(zhí)行的技術(shù)。具有多線程能力的計算機(jī)因有硬件支持而能夠在同一時間執(zhí)行多于一個線程,進(jìn)而提升整體處理性能。具有這種能力的系統(tǒng)包括對稱多處理機(jī)、多核心處理器以及芯片級多處理或同時多線程處理器。在一個程序中,這些獨立運行的程序片段叫作“線程”(Thread),利用它編程的概念就叫作“多線程處理”[1]

優(yōu)點

  1. 使用線程可以把占據(jù)時間長的程序中的任務(wù)放到后臺去處理 [2]
  2. 用戶界面可以更加吸引人,這樣比如用戶點擊了一個按鈕去觸發(fā)某些事件的處理,可以彈出一個進(jìn)度條來顯示處理的進(jìn)度 [2]
  3. 程序的運行速度可能加快 [2]
  4. 在一些等待的任務(wù)實現(xiàn)上如用戶輸入、文件讀寫和網(wǎng)絡(luò)收發(fā)數(shù)據(jù)等,線程就比較有用了。在這種情況下可以釋放一些珍貴的資源如內(nèi)存占用等 [2]
  5. 多線程技術(shù)在IOS軟件開發(fā)中也有舉足輕重的作用 [2]

缺點

  1. 如果有大量的線程,會影響性能,因為操作系統(tǒng)需要在它們之間切換 [2]
  2. 更多的線程需要更多的內(nèi)存空間 [2]
  3. 線程可能會給程序帶來更多“bug”,因此要小心使用 [2]
  4. 線程的中止需要考慮其對程序運行的影響 [2]
  5. 通常塊模型數(shù)據(jù)是在多個線程間共享的,需要防止線程死鎖情況的發(fā)生 [2]

創(chuàng)建工程

需要在工程文件pro中添加network庫

QT       += core gui network

要使用lambda函數(shù)的話還需在工程文件在加入

CONFIG += C++11

TCP服務(wù)器

創(chuàng)建一個工作類繼承QObject類

接收文件的.h文件

#ifndef RECVFILE_H
#define RECVFILE_H

#include <QObject>
#include <QTcpSocket>
#include <QTcpServer>
#include <QFile>

class RecvFile : public QObject
{
    Q_OBJECT
public:
    explicit RecvFile(QObject *parent = nullptr);
    //接收文件函數(shù)
    void recvFile();
    //啟動監(jiān)聽
    void startListen(unsigned short port);

signals:
    //接收完畢
    void recvOver();
    //通知主線程發(fā)送文件進(jìn)度百分比
    void curPercent(int num);

public slots:

private:
    QTcpServer *tcpServer;//監(jiān)聽套接字
    QTcpSocket *tcpSocket;

    QFile file;
    QString filename;//文件名稱
    qint16 filesize;//文件大小

    qint16 recvfilesize;//已接收大小
    bool isStart;//接收頭部標(biāo)記
};

#endif // RECVFILE_H

接收文件的.cpp文件

#include "recvfile.h"
#include <QFile>
#include <QDebug>

RecvFile::RecvFile(QObject *parent) : QObject(parent)
{

}
void RecvFile::startListen(unsigned short port)
{
    qDebug()<<port;
    //分配內(nèi)存空間
    tcpServer = new QTcpServer(this);
    tcpServer->listen(QHostAddress::Any,port);
    connect(tcpServer,&QTcpServer::newConnection,[=]()
    {
        //取出建立好連接的套接字
        tcpSocket = tcpServer->nextPendingConnection();

        isStart = true;
        connect(tcpSocket,&QTcpSocket::readyRead,this,&RecvFile::recvFile);
        connect(tcpSocket,&QTcpSocket::disconnected,this,[=]()
        {
            //斷開連接
            tcpSocket->close();
            tcpSocket->deleteLater();
            emit recvOver();

        });
    });
}

void RecvFile::recvFile()
{
    //取出接收的內(nèi)容
    QByteArray buf = tcpSocket->readAll();
    if(true == isStart)
    {
        //接收頭部
        isStart = false;
        //解析頭部
        filename = QString(buf).section("##",0,0);
        filesize = QString(buf).section("##",1,1).toInt();
        recvfilesize = 0;
        //打開文件
        file.setFileName(filename);
        bool isOk = file.open(QIODevice::WriteOnly);
        if(false == isOk)
        {
            return;
        }
    }
    else
    {
        qint64 len = file.write(buf);
        if(len>0)
        {
            recvfilesize += len;//累計接收大小
            int percent = (static_cast<int>(recvfilesize)*100)/filesize;
            //發(fā)出更新進(jìn)度條的信號
            emit curPercent(percent);
        }

        if(recvfilesize == filesize)
        {
            file.close();
            isStart = true;
        }
    }
}

主窗口的.h文件

#ifndef MYWIDGET_H
#define MYWIDGET_H

#include <QWidget>
#include<QTcpServer>

namespace Ui {
class MyWidget;
}

class MyWidget : public QWidget
{
    Q_OBJECT

public:
    explicit MyWidget(QWidget *parent = 0);
    ~MyWidget();
signals:
    void startListen(unsigned short);

private slots:
    void on_buttonlisten_clicked();

private:
    Ui::MyWidget *ui;
    QTcpServer *tcpServer;
};

#endif // MYWIDGET_H

主窗口的.cpp文件

#include "mywidget.h"
#include "ui_mywidget.h"
#include <QThread>
#include <QMessageBox>
#include <QFileDialog>
#include "recvfile.h"

MyWidget::MyWidget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::MyWidget)
{
    ui->setupUi(this);
    //設(shè)置進(jìn)度條
    ui->progressBar->setRange(0,100);
    ui->progressBar->setValue(0);
    //創(chuàng)建線程對象
    QThread *thread = new QThread;
    //創(chuàng)建任務(wù)對象
    RecvFile *recvWork = new RecvFile;
    //將任務(wù)對象移到子線程中
    recvWork->moveToThread(thread);

    connect(this,&MyWidget::startListen,recvWork,&RecvFile::startListen);
    //更新進(jìn)度條
    connect(recvWork,&RecvFile::curPercent,ui->progressBar,&QProgressBar::setValue);
    //啟動線程
    thread->start();

}

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

void MyWidget::on_buttonlisten_clicked()
{
    //獲取端口
    unsigned short port = ui->lineEdport->text().toUShort();
    //發(fā)出連接信號
    emit startListen(port);
}

TCP客戶端

發(fā)送文件的.h文件

#ifndef SENDFILE_H
#define SENDFILE_H

#include <QObject>
#include <QTcpSocket>
#include <QFile>
#include <QTimer>

class SendFile : public QObject
{
    Q_OBJECT
public:
    explicit SendFile(QObject *parent = nullptr);

    //連接服務(wù)器
    void connectServer(unsigned short port,QString ip);
    //發(fā)送文件
    void sendfile(QString path);
protected:
    //發(fā)送文件數(shù)據(jù)
    void sendfileData();

signals:
    //通知主線程連接成功
    void connectOK();
    //通知主線程斷開連接
    void gameover();
    //通知主線程發(fā)送文件進(jìn)度百分比
    void curPercent(int num);

public slots:

private:
    QTcpSocket *tcpSocket;

    QFile file;//文件對象
    QString filename;//文件名字
    qint16 filesize;//文件大小
    qint16 sendfilesize;//已發(fā)送大小

    QTimer *timer;

};

#endif // SENDFILE_H

發(fā)送文件的.cpp文件,利用一個QTimer對象做一個延時20ms,防止黏包問題,先創(chuàng)建一個頭部信息,包含文件名和文件大小,讓接收端先接收頭部信息,20ms后再接收數(shù)據(jù)部分。

#include "sendfile.h"
#include <QFile>
#include <QHostAddress>
#include <QFileInfo>
#include <QTimer>
#include <QDebug>
SendFile::SendFile(QObject *parent) : QObject(parent)
{

}

//連接服務(wù)器
void SendFile::connectServer(unsigned short port, QString ip)
{
    //分配內(nèi)存空間
    tcpSocket = new QTcpSocket;
    //連接服務(wù)器
    tcpSocket->connectToHost(QHostAddress(ip),port);

    //通知主線程連接成功
    connect(tcpSocket,&QTcpSocket::connected,this,&SendFile::connectOK);

    //通知主線程斷開連接
    connect(tcpSocket,&QTcpSocket::disconnected,this,[=]()
    {
        //斷開連接,釋放資源
        tcpSocket->close();
        tcpSocket->deleteLater();
        emit gameover();
    });
    timer = new QTimer(this);
    connect(timer,&QTimer::timeout,[=]()
    {
        //關(guān)閉定時器
        timer->stop();
        //發(fā)送文件數(shù)據(jù)
        sendfileData();
    });
}

//發(fā)送文件
void SendFile::sendfile(QString path)
{
    file.setFileName(path);
    //獲取文件信息
    QFileInfo info(path);
    filesize = info.size();//獲取文件大小
    filename = info.fileName();//獲取文件名
    //只讀方式打開文件
    bool isOk = file.open(QIODevice::ReadOnly);
    if(true == isOk)
    {
        //創(chuàng)建文件頭信息
        QString head = QString("%1##%2").arg(filename).arg(filesize);
        //發(fā)送頭部信息
        qint64 len = tcpSocket->write(head.toUtf8());
        if(len>0)
        {
            //防止tcp黏包問題,延時20ms
            timer->start(20);
        }
        else
        {
            //發(fā)送失敗
            file.close();
        }

    }
    else
    {
        return;
    }

}

void SendFile::sendfileData()
{
    qint64 len = 0;
    //讀多少發(fā)多少
    do
    {
        //每次發(fā)送的大小
        char buf[4*1024] = {0};
        //記錄每行數(shù)據(jù)
        len = file.read(buf,sizeof(buf));
        //計算百分比,發(fā)給主線程
        sendfilesize += len;
        int percent = (static_cast<int>(sendfilesize)*100)/filesize;
        //發(fā)出更新進(jìn)度條的信號
        emit curPercent(percent);
        //發(fā)送數(shù)據(jù)
        tcpSocket->write(buf,len);
    }while(len>0);

    if(sendfilesize == filesize)
    {
        file.close();
        filename.clear();
        filesize = 0;
    }
}

主窗口的.h文件

#ifndef MYWIDGET_H
#define MYWIDGET_H

#include <QWidget>

namespace Ui {
class MyWidget;
}

class MyWidget : public QWidget
{
    Q_OBJECT

public:
    explicit MyWidget(QWidget *parent = 0);
    ~MyWidget();
signals:
    //連接信號
    void startConnect(unsigned short,QString);
    //發(fā)送文件信號
    void sendFile(QString path);
private slots:
    void on_bConnect_clicked();

    void on_bSelectFile_clicked();

    void on_bSend_clicked();

private:
    Ui::MyWidget *ui;
};

#endif // MYWIDGET_H

主窗口的.cpp文件

#include "mywidget.h"
#include "ui_mywidget.h"
#include <QThread>
#include <QMessageBox>
#include <QFileDialog>
#include "sendfile.h"

MyWidget::MyWidget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::MyWidget)
{
    ui->setupUi(this);
    //設(shè)置ip和端口
    ui->lineEdIP->setText("127.0.0.1");
    ui->lineEdPort->setText("8888");
    //設(shè)置進(jìn)度條
    ui->progressBar->setRange(0,100);
    ui->progressBar->setValue(0);

    //創(chuàng)建線程對象
    QThread *thread = new QThread;
    //創(chuàng)建任務(wù)對象
    SendFile *sendWork = new SendFile;
    //將任務(wù)對象移到子線程中
    sendWork->moveToThread(thread);
    //當(dāng)發(fā)送sendFile信號時,讓任務(wù)對象啟動發(fā)文件處理函數(shù)
    connect(this,&MyWidget::sendFile,sendWork,&SendFile::sendfile);
    //通過信號讓任務(wù)對象連接服務(wù)器
    connect(this,&MyWidget::startConnect,sendWork,&SendFile::connectServer);
    //處理連接成功的信號,彈出連接成功的提示
    connect(sendWork,&SendFile::connectOK,this,[=]()
    {
        QMessageBox::information(this,"連接服務(wù)器","成功連接了服務(wù)器。");
    });
    //斷開連接
    connect(sendWork,&SendFile::gameover,this,[=]()
    {
        //釋放資源
        thread->quit();
        thread->wait();
        sendWork->deleteLater();
        thread->deleteLater();
    });
    //更新進(jìn)度條
    connect(sendWork,&SendFile::curPercent,ui->progressBar,&QProgressBar::setValue);
    //啟動線程
    thread->start();

}

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

void MyWidget::on_bConnect_clicked()
{
    //獲取ip和端口
    QString ip = ui->lineEdIP->text();
    unsigned short port = ui->lineEdPort->text().toUShort();
    //發(fā)出連接信號
    emit startConnect(port,ip);
}

void MyWidget::on_bSelectFile_clicked()
{
    QString path = QFileDialog::getOpenFileName();
    //判斷路徑是否為空
    if(path.isEmpty())
    {
        QMessageBox::warning(this,"打開文件","選擇路徑不能為空");
        return;
    }
    //將路徑顯示在文本欄中
    ui->lineEdfilePath->setText(path);
}

void MyWidget::on_bSend_clicked()
{
    //發(fā)送文件
    emit sendFile(ui->lineEdfilePath->text());

}

界面布局

發(fā)送端界面
qt tcp客戶端多線程,Qt,tcp/ip,qt,tcp
接收端界面
qt tcp客戶端多線程,Qt,tcp/ip,qt,tcp
項目結(jié)構(gòu)
qt tcp客戶端多線程,Qt,tcp/ip,qt,tcp

總結(jié)

這個簡易的文件傳輸,發(fā)送端和接收端都是將數(shù)據(jù)處理部分放在了子線程,主線程只負(fù)責(zé)界面的更新和部分信號的發(fā)送,子線程處理完數(shù)據(jù)后發(fā)出信號告知主線程,讓主線程做出相對應(yīng)的處理,子線程通過繼承QObject類的方式,利用信號與槽的方式進(jìn)行啟動子線程處理函數(shù)。

謝箭,何小群,LABVIEW實用程序設(shè)計,西南交通大學(xué)出版社,2017.07,第125頁
胡璞編著,體育裝備嵌入式技術(shù),中國地質(zhì)大學(xué)出版社,2014.09,第259頁

開發(fā)借鑒 Qt實現(xiàn)基于多線程的文件傳輸(服務(wù)端,客戶端)文章來源地址http://www.zghlxwxcb.cn/news/detail-534350.html

到了這里,關(guān)于Qt多線程TCP服務(wù)器客戶端傳輸文件的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • TCP實現(xiàn)服務(wù)器和客戶端通信

    TCP實現(xiàn)服務(wù)器和客戶端通信

    目錄 TCP介紹 代碼實現(xiàn) server(服務(wù)器端) 代碼分析 client(客戶端) 代碼分析 結(jié)果展示 TCP (Transmission Control Protocol) 是一種面向連接的協(xié)議,用于在計算機(jī)網(wǎng)絡(luò)中傳輸數(shù)據(jù)。TCP 可以確保數(shù)據(jù)的可靠傳輸,即使在網(wǎng)絡(luò)環(huán)境不穩(wěn)定的情況下也能夠保證數(shù)據(jù)的完整性和順序。以下是

    2024年02月15日
    瀏覽(39)
  • 【Micropython基礎(chǔ)】TCP客戶端與服務(wù)器

    【Micropython基礎(chǔ)】TCP客戶端與服務(wù)器

    MicroPython 是 Python 的一種精簡實現(xiàn),旨在運行于微控制器和嵌入式系統(tǒng)等資源受限的環(huán)境中。它提供了一種簡單而強(qiáng)大的方式來編寫和運行 Python 代碼,使開發(fā)人員能夠快速地創(chuàng)建各種嵌入式應(yīng)用程序。 在嵌入式系統(tǒng)中,網(wǎng)絡(luò)通信是一個常見的需求,而 TCP(傳輸控制協(xié)議)是

    2024年04月28日
    瀏覽(30)
  • TCP客戶端及服務(wù)器端開發(fā)實踐

    TCP客戶端及服務(wù)器端開發(fā)實踐

    ① TCP客戶端應(yīng)用程序開發(fā) ② TCP服務(wù)器端應(yīng)用程序開發(fā) 客戶端程序是指運行在用戶設(shè)備上的程序,服務(wù)端程序是指運行在服務(wù)器設(shè)備上的程序,專門為客戶端提供數(shù)據(jù)服務(wù)。那如何記憶呢? 主動發(fā)起建立連接請求的是客戶端程序,等待接受連接請求的是服務(wù)端程序。 開發(fā)流

    2024年04月09日
    瀏覽(27)
  • TCP服務(wù)器監(jiān)測客戶端異常退出方法

    ????????作為服務(wù)器必須得具備監(jiān)測客戶端狀態(tài)得機(jī)制,以保證客戶端處于不同的狀態(tài),服務(wù)器進(jìn)行不同得狀態(tài)處理,依次來提高實時性,可控性,并且有利于服務(wù)器得內(nèi)存管理。其中客戶端得異常處理就屬于其中得一種。 ????????客戶端得斷開情形無非就兩種情況:

    2024年02月09日
    瀏覽(33)
  • 簡易TCP客戶端和服務(wù)器端通信

    #includeiostream #include winsock2.h ? #include ws2tcpip.h ? #includestdlib.h using namespace std; #define ?BUF_SIZE ?1024 int main() { ? ? cout \\\"客戶端\\\" endl; ? ? //設(shè)置Winsock版本, ? ? WSADATA ? wsaData; ? ? if (WSAStartup(MAKEWORD(2, 2), wsaData) != 0) ? ? { ? ? ? ? cout \\\"error\\\" endl; ? ? ? ? exit(1); ? ? } ? ? //創(chuàng)建通

    2024年04月29日
    瀏覽(23)
  • 用C語言搭建TCP服務(wù)器/客戶端

    用C語言搭建TCP服務(wù)器/客戶端

    1.TCP流程圖 2.TCP編程 服務(wù)器 客戶端 ????????以上就是用c語言搭建的tcp服務(wù)器和客戶端,IP地址的地方可以根據(jù)自己本機(jī)的IP地址去修改(在命令提示符中可以使用ifconfig命令查看本機(jī)IP地址),端口號用的是6666,也可自己修改,但是IP地址和端口號服務(wù)器和客戶端必須一至。

    2024年02月09日
    瀏覽(25)
  • tcp服務(wù)器端與多個客戶端連接

    tcp服務(wù)器端與多個客戶端連接

    如果希望Tcp服務(wù)器端可以與多個客戶端連接,可以這樣寫: 相關(guān)的槽函數(shù)中: 使用sender()來獲取對應(yīng)的QTcpSocket對象。 其實,主要就是QTcpServer進(jìn)行監(jiān)聽: 客戶端的QTcpSocket與服務(wù)器端的QTcpSocket進(jìn)行通信。

    2024年04月28日
    瀏覽(48)
  • TCP通信實現(xiàn)客戶端向服務(wù)器發(fā)送圖片

    TCP通信實現(xiàn)客戶端向服務(wù)器發(fā)送圖片

    TCP通信: 1. TCP 協(xié)議通信交互流程: 具體的流程如下: (1)服務(wù)器根據(jù)地址類型(ipv4、ipv6)、socket 類型、協(xié)議創(chuàng)建 socket. (2)服務(wù)器為 socket 綁定 ip 地址和端口號。 (3)服務(wù)器 socket 監(jiān)聽端口號的請求,隨時準(zhǔn)備接受來自客戶端的連接,此時服務(wù)器的 socket 處于關(guān)閉狀態(tài)

    2024年02月13日
    瀏覽(32)
  • 【網(wǎng)絡(luò)編程】實現(xiàn)UDP/TCP客戶端、服務(wù)器

    【網(wǎng)絡(luò)編程】實現(xiàn)UDP/TCP客戶端、服務(wù)器

    需要云服務(wù)器等云產(chǎn)品來學(xué)習(xí)Linux的同學(xué)可以移步/--騰訊云--/--阿里云--/--華為云--/官網(wǎng),輕量型云服務(wù)器低至112元/年,新用戶首次下單享超低折扣。 ? 目錄 一、UDP 1、Linux客戶端、服務(wù)器 1.1udpServer.hpp 1.2udpServer.cc 1.3udpClient.hpp 1.4udpClient.cc 1.5onlineUser.hpp 2、Windows客戶端 二、T

    2024年02月06日
    瀏覽(19)
  • TCP服務(wù)器最多支持多少客戶端連接

    TCP服務(wù)器最多支持多少客戶端連接

    目錄 一、理論數(shù)值 二、實際部署 ?參考 ????????首先知道一個基礎(chǔ)概念,對于一個 TCP 連接可以使用四元組(src_ip, src_port, dst_ip, dst_port)進(jìn)行唯一標(biāo)識。因為服務(wù)端 IP 和 Port 是固定的(如下圖中的bind階段),那么一個TCP服務(wù)器支持最多的連接數(shù)就是由客戶端 IP 和 端口

    2024年01月21日
    瀏覽(31)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包