IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> Qt学习(五):TCP通信 -> 正文阅读

[网络协议]Qt学习(五):TCP通信

知识点

https://github.com/taw19960426/Qt_study/tree/main/QTcpTest

结果演示

在这里插入图片描述

widget.cpp

#include "widget.h"
#include "ui_widget.h"

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

    //为了防止段错误
    tcpServer = NULL;
    tcpSocket = NULL;

    setWindowTitle("服务端(端口:8888)");

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

    tcpServer->listen(QHostAddress::Any,8888);

    connect(tcpServer,&QTcpServer::newConnection,
            [=](){
        //取出建立好连接的套接字
        tcpSocket=tcpServer->nextPendingConnection();

        //获取对方的IP和端口
        QString ip=tcpSocket->peerAddress().toString();
        qint16 port =tcpSocket->peerPort();
        QString ipDate=QString("ip=%1 port=%2").arg(ip).arg(port);

        ui->showEdit->setText(ipDate);

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

                );
    }

    );
}

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

void Widget::on_buttonSend_clicked()
{
    if(NULL == tcpSocket)
    {
        return;
    }

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

void Widget::on_buttonClose_clicked()
{
    if(NULL == tcpSocket)
    {
        return;
    }

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

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QTcpServer> //监听套接字
#include <QTcpSocket> //通信套接字

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();

private slots:
    void on_buttonSend_clicked();

    void on_buttonClose_clicked();

private:
    Ui::Widget *ui;
    QTcpServer *tcpServer; //监听套接字
    QTcpSocket *tcpSocket; //通信套接字
};

#endif // WIDGET_H

clienttcp.cpp

#include "clienttcp.h"
#include "ui_clienttcp.h"
#include <QHostAddress>

ClientTCP::ClientTCP(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::ClientTCP)
{
    ui->setupUi(this);
    setWindowTitle("客户端");

    tcpSocket=new QTcpSocket(this);

    connect(tcpSocket,&QTcpSocket::connected,
            [=](){
                    ui->textEditRead->setText("与服务端已经成功连接!");
                 }

            );

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

            );

}

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

void ClientTCP::on_buttonConnect_clicked()
{
    //获取服务器ip和端口
    QString ip=ui->lineEditIP->text();
    qint16 port=ui->lineEditPort->text().toInt();

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

void ClientTCP::on_buttonWrite_clicked()
{
    //获取编辑器内容,发送到套接字
    //获取编辑区内容
    QString str=ui->textEditWrite->toPlainText();
    //给对方发送数据, 使用套接字是tcpSocket
    tcpSocket->write(str.toUtf8().data());
}

void ClientTCP::on_buttonClose_clicked()
{
    //主动和客户端端口连接
    tcpSocket->disconnectFromHost();
    tcpSocket->close();

}

clienttcp.h

#ifndef CLIENTTCP_H
#define CLIENTTCP_H

#include <QWidget>
#include <QTcpSocket>

namespace Ui {
class ClientTCP;
}

class ClientTCP : public QWidget
{
    Q_OBJECT

public:
    explicit ClientTCP(QWidget *parent = 0);
    ~ClientTCP();

private slots:
    void on_buttonConnect_clicked();

    void on_buttonWrite_clicked();

    void on_buttonClose_clicked();

private:
    Ui::ClientTCP *ui;
    QTcpSocket *tcpSocket; //通信套接字

};

#endif // CLIENTTCP_H

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-01-12 00:25:08  更:2022-01-12 00:26:44 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 11:38:21-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码