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

QT學(xué)習(xí)TCP/IP通信(一個(gè)服務(wù)端對(duì)多個(gè)客戶端)

這篇具有很好參考價(jià)值的文章主要介紹了QT學(xué)習(xí)TCP/IP通信(一個(gè)服務(wù)端對(duì)多個(gè)客戶端)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

  1. QT學(xué)習(xí)TCP/IP通信(一個(gè)服務(wù)端對(duì)多個(gè)客戶端)

  2. 一、服務(wù)端:

    1.創(chuàng)建QTcpServer對(duì)象
    2.啟動(dòng)服務(wù)器(監(jiān)聽)調(diào)用成員方法listen(QHostAddress::Any,端口號(hào))
    3.定義一個(gè)QLis容器對(duì)象存儲(chǔ)客戶信息;
    4.當(dāng)有客戶端鏈接時(shí)候會(huì)發(fā)送newConnection信號(hào),觸發(fā)槽函數(shù)接受鏈接(得到一個(gè)與客戶端通信的套接字QTcpSocket及其ip、端口信息)
    5.QTcpsocket發(fā)送數(shù)據(jù)用成員方法write(定義一個(gè)Pushbutton,點(diǎn)擊來觸發(fā)信息發(fā)送)
    6.讀數(shù)據(jù)當(dāng)客戶端有數(shù)據(jù)來,QTcpSocket對(duì)象就會(huì)發(fā)送readyRead信號(hào),關(guān)聯(lián)槽函數(shù)讀取數(shù)據(jù) buffer = tcpsocket->readAll();
    二、客戶端:
    1.創(chuàng)建QTcpSocket對(duì)象
    2.鏈接服務(wù)器connectToHost(QHostAddress(“ip”),端口號(hào))
    4.QTcpsocket發(fā)送數(shù)據(jù)用成員方法write(定義一個(gè)Pushbutton,點(diǎn)擊來觸發(fā)信息發(fā)送)
    5.讀數(shù)據(jù)當(dāng)客戶端有數(shù)據(jù)來,QTcpSocket對(duì)象就會(huì)發(fā)送readyRead信號(hào),關(guān)聯(lián)槽函數(shù)讀取數(shù)據(jù) buffer = tcpsocket->readAll();

  3. 運(yùn)行效果圖片:

QT學(xué)習(xí)TCP/IP通信(一個(gè)服務(wù)端對(duì)多個(gè)客戶端)
說明:本人也是Qt初學(xué)者可能有些地方存在錯(cuò)誤,附上程序源碼,希望對(duì)大家學(xué)習(xí)有幫助,歡迎相互交流討論!

  1. 服務(wù)端程序源碼:`在這里插入代碼片
    server.h程序源碼如下:
    #ifndef SERVER_H
    #define SERVER_H

#include
#include//監(jiān)聽套接字
#include//通信套接字
#include//列表類
QT_BEGIN_NAMESPACE
namespace Ui { class server; }
QT_END_NAMESPACE

class server : public QWidget
{
Q_OBJECT

public:
server(QWidget *parent = nullptr);
~server();

QList<QTcpSocket*> tcpclientlist;

private slots:
void server_New_Connect();
void socket_Read_Data();
void on_pushButton_send_clicked();
void on_pushButton_connect_clicked();

private:
Ui::server *ui;
QTcpServer *tcpserver;
QTcpSocket *tcpsocket;
};
#endif // SERVER_H

server.cpp程序源碼
#include “server.h”
#include “ui_server.h”

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

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

void server::on_pushButton_connect_clicked()
{
tcpserver=new QTcpServer(this);
if(ui->pushButton_connect->text() == tr(“連接”))
{
//從輸入框獲取服務(wù)端本地端口號(hào)、ip
int local_port = ui->lineEdit_port->text().toInt();
//監(jiān)聽指定的端口
//監(jiān)聽指定的端口/任意ip
tcpserver->listen(QHostAddress::Any, local_port);
connect(tcpserver,&QTcpServer::newConnection,this,&server::server_New_Connect);//連接信號(hào)槽
//修改按鍵文字
ui->pushButton_connect->setText(“取消連接”);
qDebug()<< “Listen succeessfully!”;
}
else
{

    ui->pushButton_connect->setText("連接");
    ui->textEdit->append("服務(wù)器端:未連接!");
}

}文章來源地址http://www.zghlxwxcb.cn/news/detail-503779.html

void server::server_New_Connect()
{
//獲取客戶端連接
tcpsocket = tcpserver->nextPendingConnection();
//把新進(jìn)來的客戶端存入列表
tcpclientlist.append(tcpsocket);
//文本框中顯示新的用戶信息
QString ip=tcpsocket->peerAddress().toString();//獲取對(duì)方的ip
quint16 port=tcpsocket->peerPort();//獲取對(duì)方的端口
QString temp=QString(“[%1:%2]客戶端連接成功:”).arg(ip).arg(port);
ui->textEdit->append(temp);
//接收信息
connect(tcpsocket, &QTcpSocket::readyRead, this, &server::socket_Read_Data);

}
void server::socket_Read_Data()//當(dāng)有數(shù)據(jù)過來之后讀數(shù)據(jù)
{
QByteArray buffer;
//利用for循環(huán)循環(huán)列表中的每一個(gè)連接進(jìn)來的客戶端,判斷是哪一個(gè)客戶端發(fā)的數(shù)據(jù)
for(int i = 0; i < tcpclientlist.count(); i++)
{
tcpsocket = tcpclientlist.at(i);
buffer = tcpsocket->readAll();
if(buffer.length()!=0) //如果檢測到接收到的數(shù)據(jù)長度不為0,則代表是這個(gè)客戶端發(fā)送的數(shù)據(jù)
ui->textEdit->append(buffer);
}

 buffer = tcpsocket->readAll();//讀取緩沖區(qū)數(shù)據(jù)
 QString ip=tcpsocket->peerAddress().toString();//獲取對(duì)方的ip
 quint16 port=tcpsocket->peerPort();//獲取對(duì)方的端口
 QString temp=QString("客戶端:[%1:%2]").arg(ip).arg(port);
 ui->textEdit->append(temp+":"+buffer);

}

void server::on_pushButton_send_clicked()
{
for(int i = 0; i < tcpclientlist.count(); i++)
{
tcpsocket = tcpclientlist.at(i);
if(tcpsocket==NULL)
{
return;
}
//獲取發(fā)送編輯區(qū)內(nèi)容
QString str=ui->textEdit_send->toPlainText();
//寫入writer函數(shù)調(diào)用
tcpsocket->write(str.toUtf8().data());
ui->textEdit->append(“服務(wù)器端:”+str);
}
tcpsocket->flush();

}
`

  1. 客戶端程序源碼:在這里插入代碼片
    socket.h程序源碼:
    #ifndef SOCKET_H
    #define SOCKET_H

#include
#include//通信套接字
QT_BEGIN_NAMESPACE
namespace Ui { class socket; }
QT_END_NAMESPACE

class socket : public QWidget
{
Q_OBJECT

public:
socket(QWidget *parent = nullptr);
~socket();

private slots:
void on_pushButton_connect_clicked();

void on_pushButtonSend_clicked();
void socket_Read_Data();

private:
Ui::socket *ui;

QString userName;
QTcpSocket *tcpsocket;

};
#endif // SOCKET_H

socket.cpp程序源碼:
#include “socket.h”
#include “ui_socket.h”

socket::socket(QWidget *parent)
QWidget(parent)
, ui(new Ui::socket)
{
ui->setupUi(this);
tcpsocket=new QTcpSocket(this);
connect(tcpsocket,&QTcpSocket::readyRead,this,&socket::socket_Read_Data);
}

socket::~socket()
{
delete ui;
}
void socket::socket_Read_Data()//當(dāng)有數(shù)據(jù)過來之后讀數(shù)據(jù)
{
QByteArray buffer;
buffer = tcpsocket->readAll();//讀取緩沖區(qū)數(shù)據(jù)
ui->textEdit->append(“服務(wù)端:”+buffer);//用settext()的話會(huì)覆蓋原來的消息內(nèi)容,所以用append
}

void socket::on_pushButton_connect_clicked()
{
//從界面獲取用戶名
userName = ui->lineEditUserName->text();
//創(chuàng)建一個(gè)通信套接字,用來和服務(wù)器進(jìn)行通信
if(ui->pushButton_connect->text() == tr(“連接”))
{
QString ip=ui->lineEdit_ip->text();//獲取對(duì)方的ip
quint16 port=ui->lineEdit_port->text().toInt();//獲取對(duì)方的端口
tcpsocket->connectToHost(ip,port);
connect(tcpsocket,&QTcpSocket::connected,={
ui->textEdit->append(“Server connect succeessfully!”);
});

    ui->pushButton_connect->setText("取消連接");
}
else
{
    tcpsocket->disconnectFromHost();
    tcpsocket->close();
    ui->pushButton_connect->setText("連接");
    ui->textEdit->append("客戶端:未連接!");
}

}

void socket::on_pushButtonSend_clicked()
{
if(ui->lineEditSend->text() == “”)
{
return;
}
QString msg = userName + “:” + ui->lineEditSend->text();
tcpsocket->write(msg.toUtf8().data());
ui->textEdit->append(msg);
ui->lineEditSend->clear();

}

到了這里,關(guān)于QT學(xué)習(xí)TCP/IP通信(一個(gè)服務(wù)端對(duì)多個(gè)客戶端)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • TCP/IP客戶端和服務(wù)器端建立通信過程

    TCP/IP客戶端和服務(wù)器端建立通信過程

    使用Qt提供的類進(jìn)行基于 TCP 的套接字通信需要用到兩個(gè)類: QTcpServer 類用于監(jiān)聽客戶端連接以及和客戶端建立連接,在使用之前先介紹一下這個(gè)類提供的一些常用API函數(shù): 構(gòu)造函數(shù) 給監(jiān)聽的套接字設(shè)置監(jiān)聽 listen() 函數(shù) 在代碼中 通過啟動(dòng)監(jiān)聽按鈕 設(shè)置監(jiān)聽 參數(shù): address :

    2024年02月07日
    瀏覽(23)
  • C++網(wǎng)絡(luò)通信實(shí)例(TCP/IP協(xié)議,包括服務(wù)端與客戶端通信)

    C++網(wǎng)絡(luò)通信實(shí)例(TCP/IP協(xié)議,包括服務(wù)端與客戶端通信)

    創(chuàng)作不易 覺得有幫助請(qǐng)點(diǎn)贊關(guān)注收藏 TCP/IP是當(dāng)下網(wǎng)絡(luò)協(xié)議棧中的主流協(xié)議 TCP屬于傳輸層的協(xié)議? 可靠傳輸 包括經(jīng)典的三次握手等等 IP協(xié)議是網(wǎng)絡(luò)層協(xié)議 盡全力傳輸?shù)豢煽?學(xué)過計(jì)算機(jī)網(wǎng)絡(luò)的同學(xué)們對(duì)這個(gè)應(yīng)該比較熟悉 以下是使用C++進(jìn)行網(wǎng)絡(luò)通信的實(shí)例? 服務(wù)端 主要使用

    2024年02月14日
    瀏覽(20)
  • Socket網(wǎng)絡(luò)編程(TCP/IP)實(shí)現(xiàn)服務(wù)器/客戶端通信。

    Socket網(wǎng)絡(luò)編程(TCP/IP)實(shí)現(xiàn)服務(wù)器/客戶端通信。

    一.前言 回顧之前進(jìn)程間通信(無名管道,有名管道,消息隊(duì)列,共享內(nèi)存,信號(hào),信號(hào)量),都是在同一主機(jī)由內(nèi)核來完成的通信。 那不同主機(jī)間該怎么通信呢? 可以使用Socket編程來實(shí)現(xiàn)。 Socket編程可以通過網(wǎng)絡(luò)來實(shí)現(xiàn)實(shí)現(xiàn)不同主機(jī)之間的通訊。 二.Socket編程的網(wǎng)絡(luò)模型如

    2024年02月08日
    瀏覽(37)
  • Socket實(shí)例,實(shí)現(xiàn)多個(gè)客戶端連接同一個(gè)服務(wù)端代碼&TCP網(wǎng)絡(luò)編程 ServerSocket和Socket實(shí)現(xiàn)多客戶端聊天

    Socket實(shí)例,實(shí)現(xiàn)多個(gè)客戶端連接同一個(gè)服務(wù)端代碼&TCP網(wǎng)絡(luò)編程 ServerSocket和Socket實(shí)現(xiàn)多客戶端聊天

    Java socket(套接字)通常也稱作\\\"套接字\\\",用于描述ip地址和端口,是一個(gè)通信鏈的句柄。應(yīng)用程序通常通過\\\"套接字\\\"向網(wǎng)絡(luò)發(fā)出請(qǐng)求或者應(yīng)答網(wǎng)絡(luò)請(qǐng)求。 使用socket實(shí)現(xiàn)多個(gè)客戶端和同一客戶端通訊;首先客戶端連接服務(wù)端發(fā)送一條消息,服務(wù)端接收到消息后進(jìn)行處理,完成后再

    2024年02月12日
    瀏覽(89)
  • 網(wǎng)絡(luò)通信(13)-C#TCP服務(wù)器和客戶端同時(shí)在一個(gè)進(jìn)程實(shí)現(xiàn)的實(shí)例

    網(wǎng)絡(luò)通信(13)-C#TCP服務(wù)器和客戶端同時(shí)在一個(gè)進(jìn)程實(shí)現(xiàn)的實(shí)例

    有時(shí)項(xiàng)目需求中需要服務(wù)器和客戶端同時(shí)在一個(gè)進(jìn)程實(shí)現(xiàn),一邊需要現(xiàn)場接收多個(gè)客戶端的數(shù)據(jù),一邊需要將數(shù)據(jù)匯總后發(fā)送給遠(yuǎn)程服務(wù)器。下面通過實(shí)例演示此項(xiàng)需求。 C#TCP服務(wù)器和客戶端同時(shí)在一個(gè)進(jìn)程實(shí)現(xiàn)的實(shí)例如下: 界面設(shè)計(jì) UI文件代碼

    2024年01月22日
    瀏覽(34)
  • netty學(xué)習(xí)(3):SpringBoot整合netty實(shí)現(xiàn)多個(gè)客戶端與服務(wù)器通信

    netty學(xué)習(xí)(3):SpringBoot整合netty實(shí)現(xiàn)多個(gè)客戶端與服務(wù)器通信

    創(chuàng)建一個(gè)SpringBoot工程,然后創(chuàng)建三個(gè)子模塊 整體工程目錄:一個(gè)server服務(wù)(netty服務(wù)器),兩個(gè)client服務(wù)(netty客戶端) pom文件引入netty依賴,springboot依賴 NettySpringBootApplication NettyServiceHandler SocketInitializer NettyServer NettyStartListener application.yml Client1 NettyClientHandler SocketInitializ

    2024年02月11日
    瀏覽(56)
  • 基于C++和Qt封裝一個(gè)簡單的socket(TCP/IP)通信UI界面

    基于C++和Qt封裝一個(gè)簡單的socket(TCP/IP)通信UI界面

    ????????最近在學(xué)習(xí)TCP/IP和socket套接字的有關(guān)知識(shí),了解了三次握手四次揮手,TCP協(xié)議等等一大堆知識(shí),但紙上得來終覺淺。網(wǎng)絡(luò)上C++代碼實(shí)現(xiàn)socket通信的資料很多,方便學(xué)習(xí),于是想到自己用Qt實(shí)現(xiàn)一個(gè)基礎(chǔ)的具有網(wǎng)絡(luò)通信收發(fā)功能的服務(wù)端UI軟件。進(jìn)入正題: ? ? ? ?

    2024年02月08日
    瀏覽(21)
  • S7-1200中通過MODBUS TCP客戶端在一次請(qǐng)求中實(shí)現(xiàn)從服務(wù)器讀寫一個(gè)或多個(gè)保持性寄存器的具體方法

    S7-1200中通過MODBUS TCP客戶端在一次請(qǐng)求中實(shí)現(xiàn)從服務(wù)器讀寫一個(gè)或多個(gè)保持性寄存器的具體方法

    TIA博途V17中增加了MODBUS TCP客戶端功能碼 23,可以在一次請(qǐng)求作業(yè)下實(shí)現(xiàn)從服務(wù)器讀取和寫入一個(gè)或多個(gè)保持性寄存器,這樣省去了輪詢的編程工作量,提高了工作效率,如下圖所示, 使用該指令的前提條件: ? TIA Portal V17 及以上版本 ? CPU 固件 V4.2 及以上版本 具體操作方

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

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

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

    2024年04月28日
    瀏覽(48)
  • Tcp server是如何一個(gè)端口處理多個(gè)客戶端連接的(一對(duì)一還是一對(duì)多)

    Tcp server是如何一個(gè)端口處理多個(gè)客戶端連接的(一對(duì)一還是一對(duì)多)

    我們經(jīng)??吹秸f,TCP 是一對(duì)一的兩點(diǎn)服務(wù),UDP 支持一對(duì)一、一對(duì)多、多對(duì)多的交互通信。但是使用Tcp工具通訊時(shí),一個(gè)Tcp服務(wù)端可以連接多個(gè)Tcp客戶端。所以這里的一對(duì)一和一對(duì)多是不是沖突了? 并不是 。一對(duì)一指的是Tcp連接,什么是Tcp連接,這里直接粘貼小林大神的解釋

    2023年04月08日
    瀏覽(23)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包