QT tcp通信

QT tcp通信

TcpTest.pro

cpp 复制代码
QT       += core gui network

CONFIG += C++11

main.cpp

cpp 复制代码
#include "serverwidget.h"
#include <QApplication>

#include "clientwidget.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    ServerWidget w;
    w.show();

    ClientWidget w2;
    w2.show();

    return a.exec();
}

serverwidget.h

cpp 复制代码
#include <QTcpServer>  // 监听套接字
#include <QTcpSocket>  // 通信套接字

private slots:
    void on_pushButtonsend_clicked();

    void on_pushButton_2close_clicked();

private:
    

    QTcpServer *tcpServer; // 监听套接字
    QTcpSocket *tcpSocket; // 通信套接字

};

serverwidget.cpp

cpp 复制代码
#include "serverwidget.h"
#include "ui_serverwidget.h"
#include <QDebug>

ServerWidget::ServerWidget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::ServerWidget)
{
    ui->setupUi(this);

    tcpServer = NULL;
    tcpSocket = NULL;

    // 监听套接字,指定父对象让其自动回收空间
    tcpServer = new QTcpServer(this);
    tcpServer->listen(QHostAddress::Any, 8888);

    setWindowTitle("服务器: 8888");

    connect(tcpServer, &QTcpServer::newConnection, [=](){
       // 取出建立好连接的套接字
        tcpSocket = tcpServer->nextPendingConnection();
        // 获取对方的ip和端口
        QString ip = tcpSocket->peerAddress().toString();
        // qint16 port = tcpSocket->peerPort();
				quint16 port = tcpSocket->peerPort();
        // qDebug() << port;
        QString temp = QString("[%1:%2]:成功连接").arg(ip).arg(port);
        ui->textEdit->setText(temp);

        connect(tcpSocket, &QTcpSocket::readyRead, [=](){
           // 从通信套接字中取出内容
            QByteArray array = tcpSocket->readAll();
            ui->textEdit->append(array);
        });

    });

}

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

void ServerWidget::on_pushButtonsend_clicked()
{
    if(NULL == tcpSocket){
        return;
    }

    // 获取编辑区内容
    QString str = ui->textEdit_2->toPlainText();
    // 给对方发送数据 使用套接字是tcpSocket
    tcpSocket->write( str.toUtf8().data() );

}

void ServerWidget::on_pushButton_2close_clicked()
{
    if(NULL == tcpSocket){
        return;
    }

    // 主动和客户端断开连接
    tcpSocket->disconnectFromHost();
    tcpSocket->close();
    tcpSocket = NULL;
}

clientwidget.h

cpp 复制代码
#include <QTcpSocket> // 通信套接字

private slots:
    void on_pushButtonconn_clicked();

    void on_pushButton_2send_clicked();

    void on_pushButton_3close_clicked();

private:
    

    QTcpSocket *tcpsocket; // 通信套接字

clientwidget.cpp

cpp 复制代码
#include "clientwidget.h"
#include "ui_clientwidget.h"

#include <QHostAddress>

ClientWidget::ClientWidget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::ClientWidget)
{
    ui->setupUi(this);

    tcpsocket = NULL;

    // 分配空间,指定父对象
    tcpsocket = new QTcpSocket(this);

    setWindowTitle("客户端");

    connect(tcpsocket, &QTcpSocket::connected, [=](){
       ui->textEdit->setText("成功和服务器建立好连接");
    });

    connect(tcpsocket, &QTcpSocket::readyRead, [=](){
        // 获取对方发送的内容 从通信套接字中取出内容
        QByteArray array = tcpsocket->readAll();
        // 追加到编辑区中
        ui->textEdit->append(array);
    });

}

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

void ClientWidget::on_pushButtonconn_clicked()
{
    // 获取服务器ip和端口
    QString ip = ui->lineEdit_2IP->text();
    quint16 port = ui->lineEditport->text().toInt();

    // 主动和服务器建立连接
    tcpsocket->connectToHost(QHostAddress(ip), port);

}

void ClientWidget::on_pushButton_2send_clicked()
{
    // 获取编辑框内容
    QString str = ui->textEdit_2->toPlainText();
    // 发送数据
    tcpsocket->write( str.toUtf8().data() );
}

void ClientWidget::on_pushButton_3close_clicked()
{
    // 主动和对方断开连接
    tcpsocket->disconnectFromHost();
    tcpsocket->close();

}

serverwidget.ui

clientwidget.ui

相关推荐
半杯咖啡半行码2 小时前
Qt开发实战:数据库、MV 模式、QProcess与串口通信全攻略
数据库·qt
时间的拾荒人3 小时前
Qt 界面优化:绘图详解 —— 从基础图形到图片处理
开发语言·qt·面试
MayZork3 小时前
Qt 文件操作:QSaveFile 与 QTemporaryFile(含 QTemporaryDir)实战
开发语言·qt
深圳恒讯5 小时前
海外服务器延迟高怎么解决?从线路到TCP协议的6层排查清单
运维·服务器·tcp/ip
半杯咖啡半行码6 小时前
Qt 开发基础:版本演进、常用工具与多平台安装
开发语言·qt
盛世宏博北京8 小时前
工业环境稳定采集:配电室 IP 温湿度变送器 TCP/UDP 通信部署指南
单片机·tcp/ip·udp
smile0029 小时前
Modbus RTU/TCP通信测试怎么做?从协议要点到自动化回归的完整实践
tcp/ip·回归·自动化
qq_4017004111 小时前
Qt Signal Mapper:一堆按钮,怎么共用一个槽函数
开发语言·qt
Python图像识别12 小时前
35-【2027毕设】YOLO11中草药检测识别系统 - Python完整源码+PyQt5界面+训练模型+数据集
python·qt·课程设计
马六六i12 小时前
市面上专业的IP驱动产业新场景新工具哪家好
网络·人工智能·python·tcp/ip