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

运行结果

相关推荐
浩浩测试一下8 小时前
Authpf(OpenBSD)认证防火墙到ssh连接到SSH端口转发技术栈 与渗透网络安全的关联 (RED Team Technique )
网络·网络协议·tcp/ip·安全·网络安全·php
小道士写程序9 小时前
Qt 5.12 上读取 .xlsx 文件(Windows 平台)
开发语言·windows·qt
孤寂大仙v9 小时前
【计算机网络】网络层IP协议与子网划分详解:从主机通信到网络设计的底层逻辑
tcp/ip·计算机网络·php
漫步者TZ10 小时前
【Netty系列】解决TCP粘包和拆包:LengthFieldBasedFrameDecoder
java·网络协议·tcp/ip·netty
yxc_inspire13 小时前
基于Qt的app开发第十三天
c++·qt·app·tcp·面向对象
hgdlip13 小时前
重启路由器ip不变怎么回事?原因分析与解决方法
网络协议·tcp/ip·智能路由器
潇-xiao14 小时前
Qt 按钮类控件(Push Button 与 Radio Button)(1)
c++·qt
hgdlip14 小时前
手机上网可以固定ip地址吗?详细解析
网络·tcp/ip·智能手机
2501_9159214314 小时前
高敏感应用如何保护自身不被逆向?iOS 安全加固策略与工具组合实战(含 Ipa Guard 等)
websocket·网络协议·tcp/ip·http·网络安全·https·udp
2501_9151063215 小时前
App 上线后还能加固吗?iOS 应用的动态安全补强方案实战分享(含 Ipa Guard 等工具组合)
websocket·网络协议·tcp/ip·http·网络安全·https·udp