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

运行结果

相关推荐
xcyxiner5 小时前
DicomViewer (目录调整) 2
qt
xcyxiner7 小时前
dcmtk vtk vtk-dicom(gdcm) 编译(debug) v2
qt
treesforest2 天前
AI安全系统如何识别异常访问?IP风险识别正在成为关键能力
网络·人工智能·tcp/ip·安全·web安全
桥田智能2 天前
桥田智能 QT-650S:面向白车身焊装的 800kg 重载快换解决方案
开发语言·qt·系统架构
森G2 天前
75、服务器源码解析---------云视频服务项目
linux·服务器·网络·c++·qt
江华森2 天前
TCP/IP 协议栈实战 — 7 个实验详解
网络·tcp/ip·智能路由器
森G2 天前
77、线程池原理和实现------服务器源码解析----云视频服务项目
服务器·c++·qt
酉鬼女又兒2 天前
零基础入门计算机网络运输层:端到端通信核心作用、端口号分类规则、复用分用工作机制及UDP与TCP协议全方位对比详解
网络·网络协议·tcp/ip·计算机网络·考研·udp·php
dog2502 天前
不要再继续优化 TCP
网络协议·tcp/ip·php
森G2 天前
71、打包发布---------打包发布
c++·qt