qt介绍tcp通信

服务器端代码

复制代码
#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    setWindowTitle("服务器");
    ui->port->setText("8899");
    m_s=new QTcpServer(this);
    connect(m_s,&QTcpServer::newConnection,this,[=](){
        m_tcp=m_s->nextPendingConnection();
        m_status->setPixmap(QPixmap(":/image/2.jpg").scaled(20,20));
        connect(m_tcp,&QTcpSocket::readyRead,this,[=](){ //检测是否接受数据
            QByteArray data=m_tcp->readAll();
            ui->record->append("客户端说:"+data);
        });
        connect(m_tcp,&QTcpSocket::disconnected,this,[=](){
            m_tcp->close();
            m_tcp->deleteLater();
            m_status->setPixmap(QPixmap(":/image/1.jpg").scaled(20,20));
        });
    });//有客户端连接会发出一个信号

    m_status=new QLabel();
    m_status->setPixmap(QPixmap(":/image/1.jpg").scaled(20,20));
    ui->statusbar->addWidget(new QLabel("连接状态"));
    ui->statusbar->addWidget(m_status);

}

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

void MainWindow::on_setListen_clicked()
{
    unsigned short port=ui->port->text().toShort();
    m_s->listen(QHostAddress::Any,port);
    ui->setListen->setDisabled(true);
}
void MainWindow::on_sendMessage_clicked()
{
    QString msg=ui->message->toPlainText();
    m_tcp->write(msg.toUtf8());
    ui->record->append("服务器说:"+msg);
}

客户端代码

复制代码
#include "mainwindow.h"
#include "ui_mainwindow.h"



MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    ui->disconnect->setDisabled(true);
    setWindowTitle("客户端");
    ui->port->setText("8899");
    ui->ip->setText("127.0.0.1");
    m_tcp=new QTcpSocket(this);
    connect(m_tcp,&QTcpSocket::readyRead,this,[=](){ //检测是否接受数据
        QByteArray data=m_tcp->readAll();
        ui->record->append("服务器端说:"+data);
    });
    connect(m_tcp,&QTcpSocket::disconnected,this,[=](){
        m_tcp->close();
        m_tcp->deleteLater();
        m_status->setPixmap(QPixmap(":/image/1.jpg").scaled(20,20));
          ui->record->setText("已经断开连接服务器...");
        ui->connect->setEnabled(true);
        ui->disconnect->setDisabled(false);
    });

    connect(m_tcp,&QTcpSocket::connected,this,[=](){

        m_status->setPixmap(QPixmap(":/image/2.jpg").scaled(20,20));
        ui->record->setText("已经成功连接服务器...");
          ui->connect->setDisabled(true);
         ui->disconnect->setEnabled(true);
    });

    m_status=new QLabel();
    m_status->setPixmap(QPixmap(":/image/1.jpg").scaled(20,20));
    ui->statusbar->addWidget(new QLabel("连接状态"));
    ui->statusbar->addWidget(m_status);

}

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



void MainWindow::on_sendMessage_clicked()
{
    QString msg=ui->message->toPlainText();
    m_tcp->write(msg.toUtf8());
    ui->record->setText("客户端说:"+msg);
}


void MainWindow::on_connect_clicked()
{
    QString ip=ui->ip->text();
    unsigned short port=ui->port->text().toUShort();
    m_tcp->connectToHost(QHostAddress(ip),port);
}


void MainWindow::on_disconnect_clicked()
{
    m_tcp->close();
    ui->connect->setDisabled(false);
    ui->disconnect->setEnabled(false);
}

运行结果

相关推荐
酣大智17 小时前
华为 VRRP的抢占延迟时间
网络·tcp/ip·vrrp
实心儿儿17 小时前
Qt — 信号和槽
qt
江湖人称菠萝包18 小时前
【Qt】《Qt 5.9 C++开发指南》笔记-Chapter8-绘图
笔记·qt·qt5
西西弗Sisyphus19 小时前
Qt 实现一个 水波进度球
c++·qt·c
酣大智1 天前
网络协议计时器 & 发包间隔汇总
运维·网络·tcp/ip
IpdataCloud1 天前
AI智能体调用工具怎么核验来源IP?归属地、网络类型与代理风险识别(含Python代码)
数据库·python·tcp/ip
RAN11426760081 天前
1.3第一个程序的介绍
开发语言·qt
ITxiaobing20232 天前
IP 地理定位数据库的技术选型:数据源、格式与精度对比
tcp/ip
实心儿儿2 天前
Qt — 命名方式、坐标系
qt
小小龙学IT2 天前
Qt QPainter 2D 绘图系统深度解析:从画笔到渲染引擎适
c++·qt