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);
}

运行结果

相关推荐
qq_4017004118 小时前
Qt Positioning 模块访问设备地理位置信息
开发语言·qt
闫有尽意无琼20 小时前
银河麒麟v11 arm编译Qt creator8.0.2报错
开发语言·qt
lqj_本人20 小时前
鸿蒙Qt触控疑云:事件传递丢失与坐标偏移修复
qt·华为·harmonyos
_OP_CHEN20 小时前
从零开始的Qt开发指南:(五)Qt 常用控件之 QWidget(上):解锁 Qt 界面开发的核心基石
开发语言·c++·qt·前端开发·qwidget·gui开发·qt常用控件
happyjoey2171 天前
使用Qt自带的Maintenance Tool将Qt6.9升级为QT6.10
开发语言·qt
lqj_本人1 天前
鸿蒙Qt生命周期:后台被杀后的数据自救
qt·华为·harmonyos
q***16081 天前
IP地址、子网掩码(NETMASK)和网关(Gateway)
tcp/ip·gateway·智能路由器
RocketJ1 天前
TCP、Telepathy 和 HTTP 三者关系
网络协议·tcp/ip·http
爱码小白2 天前
PyQt5 QTimer总结
开发语言·qt
Jay Chou why did2 天前
13. Qt深入 样式表继承规则
qt