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网络编程入门教学】【点击程序A、程序B响应】 -> 正文阅读

[网络协议]【QT】【TCP网络编程入门教学】【点击程序A、程序B响应】

在QT新建widget项目,不勾选ui。然后在pro文件开头添加一行代码:

QT       += network

然后在widget.h中复制粘贴以下代码:

//这个文件中的内容不需要理解。
//这些内容是硬性规定,直接复制粘贴就可以。

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>       
#include <QHBoxLayout>   
#include <QPushButton>    
#include <QTcpSocket>     

class Widget : public QWidget{
    Q_OBJECT
public:
    Widget(QWidget *parent = nullptr);
private slots:
    void F1();
private:
    QTcpSocket  *R;
    QPushButton *A;
};

#endif

然后在widget.cpp中复制粘贴以下代码:

#include "widget.h"

Widget::Widget(QWidget *parent):QWidget(parent){
    //在虚空中创建一个发送按钮。
    //如果点击发送按钮,那么执行F1。F1的定义在后文。
    //注:只能先在虚空中创建按钮,后文再把按钮从虚空中移动到界面中。
    A = new QPushButton("发送");
    connect(A, &QPushButton::clicked, this, &Widget::F1);

    //连接第二个程序。
    //在后文中,第二个程序的识别号会被设置为4444。因此此处连接4444号程序。
    R = new QTcpSocket();
    R->connectToHost("127.0.0.1", 4444);

    //把按钮从虚空中移动到界面中。
    QHBoxLayout *X = new QHBoxLayout(this);
    X->addWidget(A);
    setLayout(X);
}

//如果点击发送按钮,那么执行F1。
//F1:发送数据“XXX”。
void Widget::F1(){
    QString X="XXX";
    R->write(X.toLatin1());
    R->flush();
}

然后在main.cpp中复制粘贴以下代码:

//这个文件中的内容不需要理解。直接复制粘贴即可。
//对于所有项目,这个文件中的内容都一样,不需要修改。

#include "widget.h"
#include <QApplication>

int main(int argc, char *argv[]){
    QApplication a(argc, argv);
    Widget w;
    w.show();
    return a.exec();
}

这样,程序A就做好了。接下来做程序B。

在QT新建widget项目,不勾选ui。然后在pro文件开头添加一行代码:

QT       += network

然后在widget.h中复制粘贴以下代码:

//本文件不需要理解。

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QTcpServer>
#include <QTcpSocket>
#include <QTextEdit>
#include <QHBoxLayout>

class Widget : public QWidget{
    Q_OBJECT
public:
    Widget(QWidget *parent = nullptr);
private slots:
    void F1();
    void F2();
private:
    QTcpSocket* R;
    QTcpServer* S;
    QTextEdit * A;
};

#endif

然后在widget.cpp中复制粘贴以下代码:

#include "widget.h"

Widget::Widget(QWidget *parent):QWidget(parent){
    //第一个程序会连接识别号为4444的程序。
    //此处将本程序的识别号设置为4444,从而使得第一个程序能够连接本程序。
    //如果有程序连接本程序,那么执行F1。
    S = new QTcpServer();
    S->listen(QHostAddress::Any, 4444);
    connect(S,&QTcpServer::newConnection,this,&Widget::F1);

    //创建一个文本框,并把它放入界面。
    //未来,如果点击第一个程序上的按钮,那么这个文本框上就会显示“XXX”。
    A = new QTextEdit();
    QHBoxLayout *X = new QHBoxLayout(this);
    X->addWidget(A);
    setLayout(X);
}

//如果有程序连接本程序,那么执行F1。
//F1:如果这个程序给本程序发了消息,那么执行F2。
void Widget::F1(){
    R = S->nextPendingConnection();
    QObject::connect(R, &QTcpSocket::readyRead, this, &Widget::F2);
}

//F2:把收到的消息显示在文本框中。
void Widget::F2(){
    QByteArray X = R->readAll();
    A->setText(X);
}

然后在main.cpp中复制粘贴以下代码:

//本文件不需要理解。

#include "widget.h"
#include <QApplication>

int main(int argc, char *argv[]){
    QApplication a(argc, argv);
    Widget w;
    w.show();
    return a.exec();
}

这样,程序B就做好了。

先运行程序B,再运行程序A,然后点击A上的按钮,你就会看到B的文本框中出现“XXX”。这就实现了一个简单的通讯。

(注:必须先运行B、再运行A。顺序不要错。)

另外,不知道大家如何看待本文的注释风格。如果大家喜欢的话,我今后会继续采用这样的注释风格。

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-02-01 20:56:37  更:2022-02-01 20:56:55 
 
开发: 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 10:51:35-

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