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

运行结果

相关推荐
doll ~CJ1 小时前
基于QVTKOpenGLNativeWidget的三维点云可视化实现
c++·qt·软件开发·三维点云可视化
monster_风铃3 小时前
BFD原理与配置
服务器·网络·tcp/ip·信息安全管理与评估
axban4 小时前
QT M/V架构开发实战:M/V架构的初步认识
开发语言·数据库·qt
大可门耳5 小时前
Qt的数据库模块介绍,Qt访问SQLite详细示例
数据库·qt·sqlite
axban7 小时前
QT M/V架构开发实战:QAbstractItemModel介绍
java·数据库·qt
草丛中的蝈蝈8 小时前
qt中给QListWidget添加上下文菜单(快捷菜单)
开发语言·qt
不知名的前端专家8 小时前
uniapp原生插件 TCP Socket 使用文档
网络·tcp/ip·uni-app·netty
大可门耳11 小时前
qt调用cef的Demo,实现js与C++之间的交互细节
javascript·c++·经验分享·qt
xiaoxiongip66612 小时前
动态ip适合挂什么项目
网络·爬虫·python·网络协议·tcp/ip·ip
佛珠散了一地13 小时前
【qt】通过TCP传输json,json里包含图像
qt·tcp/ip·json