QT网络通信-服务器(一)

news2024/11/23 2:06:54

目录

1、简介

2 、TCP通信流程

 3、基于TCP通信所需要的类

4、QT端设计

4.1项目建立

 4.2 TCP网络程序设计

 4.2.1 QT界面设计

 4.2.2 UI布局

 4.2.3 控件重命名

 5、widget.h

6、widget.c


1、简介

网络有TCP和UDP。本文主要通过QT完成TCP网络设计,通过ESP8266与单片机进行通讯。

2 、TCP通信流程

 3、基于TCP通信所需要的类

QTcpSever 服务器类,用于监听客户端连接以及和客户端建立连接。

QTcpSocket 通信的套接字类,客户端、服务器端都需要使用。

QTcpSever、QTcpSocket都属于网络模块network。

4、QT端设计

4.1项目建立

1、

 2、

 3、

 4、

 5、

 6、

7、

 4.2 TCP网络程序设计

QT提供了QTcpServer类,可以直接实例化一个客户端,可在help中索引如下:

The QTcpServer class provides a TCP-based server. More...
Header:     #include <QTcpServer> 
qmake:      QT += network
Inherits:       QObject

首先在在.pro文件中添加QT += network才可以进行网络编程

QT       += core gui network

接着在widget.h中添加所需头文件,头文件如下所示:

#include <QTcpServer>
#include <QTcpSocket>
#include <QNetworkInterface>

 4.2.1 QT界面设计

如下所示:

1、

 2、

 3、

 4、

 5、

 6、

 4.2.2 UI布局

 整体垂直布局

 对于接收框设置成只读,如下所示:

 4.2.3 控件重命名

 

 5、widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QTcpServer>
#include <QTcpSocket>
#include <QNetworkInterface>

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

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

    QTcpServer *tcpserver;//声明一个QTcpserver的对象,用于监听
    QTcpSocket *tcpsocket;//创建服务器的套接字,用于与客户端进行通信

private slots:
    void newConnection_Slot();
    void readyRead_Slot();

    void on_open_Button_clicked();
    
    void on_close_Button_clicked();
    
    void on_send_Button_clicked();
    
private:
    Ui::Widget *ui;
};

#endif // WIDGET_H

6、widget.c

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

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

    tcpserver = new QTcpServer(this);
    tcpsocket = new QTcpSocket(this);



    //当服务器发现有人要来连接时,就会发出newconnection 的信号,从而触发槽函数newConnection_Slot()(自行编写的槽函数)
    connect(tcpserver,SIGNAL(newConnection()),this,SLOT(newConnection_Slot()));
}

//建立接收客户端连接的槽函数,有人连接就触发这个槽函数
void Widget::newConnection_Slot()
{
     //获取这个服务器sserver与客户端通信的套接字
    tcpsocket = tcpserver->nextPendingConnection();
    connect(tcpsocket,SIGNAL(readyRead()),this,SLOT(readyRead_Slot()));
}

void Widget::readyRead_Slot()
{
    QString buf;
    buf = tcpsocket->readAll();
    ui->rece_Edit->appendPlainText(buf);
}

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

void Widget::on_open_Button_clicked()
{
    //服务端点击启动服务器,服务器就开始监听
    //监听----------启动服务器
    //QHostAddress::Any 地址,接纳所有的地址
    //端口号  ui->sportEdit->text()获得输入的字符串,转换成无符号短整型
    tcpserver->listen(QHostAddress::Any,ui->port_line->text().toUShort());
}

void Widget::on_close_Button_clicked()
{
    tcpserver->close();
}

void Widget::on_send_Button_clicked()
{
    tcpsocket->write(ui->send_line->text().toLocal8Bit().data());
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/424993.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JavaEE简单实例——一些基本操作

在配置类中配置页面解析器 之前我们使用页面解析器是在XML配置文件中使用的&#xff0c;但是当我们试用了纯注解式的整合之后&#xff0c;我们没有了配置文件&#xff0c;要如何去将之前我们在配置文件中编写的前端控制器&#xff0c;以及静态资源的释放这些功能配置添加到项目…

二叉排序树(二叉查找树)基本操作_20230417

二叉排序树&#xff08;二叉查找树&#xff09;基本操作_20230417 前言 二叉排序树首先是一颗二叉树&#xff0c;它不同于常规二叉树的地方在于&#xff0c;如果左子树不为空&#xff0c;那么左子树上所有结点的值都不大于根节点的值&#xff0c;如果右子树不为空&#xff0c…

从GPT-4、文心一言再到Copilot,AIGC卷出新赛道?

业内人都知道&#xff0c;上一周是戏剧性的&#xff0c;每一天&#xff0c;都是颠覆各个行业&#xff0c;不断 AI 化的新闻。 OpenAI发布GPT-4、百度发布文心一言、微软发布Microsoft 365 Copilot 三重buff叠加&#xff0c;打工人的命运可以说是跌宕起伏&#xff0c;命途多舛了…

pmp证书报考流程+pmp备考+pmp学习干货+pmp指南汇总

2023年共有4次PMP考试&#xff0c;分别是3月、5月、8月、11月&#xff0c;由于3月份考试不开放新报名&#xff0c;所以第一次备考PMP的同学可以选择参加5月份考试。那么&#xff0c;现在备考5月份PMP考试还来得及吗&#xff1f; 现在开始备考5月PMP考试&#xff0c;时间是非常…

Scrum

目录 1、Scrum&#xff1a; 敏捷里的3355&#xff1a; 什么是Scrum&#xff1a; Scrum的优点&#xff1a; Scrum的理论&#xff1a; Scrum的三大支柱&#xff1a; 透明性&#xff1a; 检视&#xff1a; 调整&#xff1a; 2、Scrum的角色简介&#xff1a; Scrum各角色…

【数据结构学习笔记 之 栈和队列】——上

前言&#xff1a;栈和队列是常用的数据结构之一&#xff0c;本文主要介绍有关栈的基本特性以及基本操作和一些经典的OJ题目&#xff0c;关于队列的介绍放到下篇。那么话不多说&#xff0c;让我们开始吧。 一、栈的基本知识 1. 栈的基本概念 栈是一种特殊的线性表&#xff0c…

同学在外包干了两年的点点点,24岁人就快废了

前言 简单的说下&#xff0c;我大学的一个同学&#xff0c;毕业后我自己去了自研的公司&#xff0c;他去了外包&#xff0c;快两年了我薪资、技术各个方面都有了很大的提升&#xff0c;他在外包干的这两年人都要废了&#xff0c;技术没一点提升&#xff0c;学不到任何东西&…

JavaScript 的学习

文章目录一、简介总结一、简介 JavaScript 是互联网上最流行的脚本语言&#xff0c;这门语言可用于 HTML 和 web&#xff0c;更可广泛用于服务器、PC、笔记本电脑、平板电脑和智能手机等设备。 JavaScript 是脚本语言 JavaScript 是一种轻量级的编程语言。 JavaScript 是可插入…

如果要向“硅谷精神之父”提一道问题,你会问什么?| CSDN 访谈世界互联网教父 Kevin Kelly

ChatGPT 的问世不禁让人遐想&#xff0c;接下来的 5000 天&#xff0c;将会发生什么事&#xff1f; 硅谷精神之父、世界互联网教父、《失控》作者凯文凯利&#xff08;Kevin Kelly&#xff0c;以下简称 K.K.&#xff09;是这样预测的&#xff1a; 未来将会是一切都与 AI 相连的…

Vue3通知提醒框(Notification)

Vue3相关组件项目依赖版本信息 可自定义设置以下属性&#xff1a; 消息的标题&#xff08;title&#xff09;&#xff0c;默认温馨提示自动关闭的延时时长&#xff08;duration&#xff09;&#xff0c;单位ms&#xff0c;默认4500ms消息从顶部弹出时&#xff0c;距离顶部的位…

【问题】开发遇到的小问题

文章目录使用糊涂工具&#xff0c;将时间字符串转化为LocalDateTime类型Date类型转换LocalDate类型jdk8 LocalDateTime获取当前时间和前后推时间echarts图中显示表格是需要添加宽高前端往后端传值时&#xff0c;需要转一下对象再往后端传使用 value-format"yyyy-MM-dd HH:…

jwt授权

JWT格式 由header、payload、signature三部分组成&#xff0c;中间用圆点(.)连接: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJpYW0uYXBpLm1hcm1vdGVkdS5jb20iLCJleHAiOjE2NDI4NTY2MzcsImlkZW50aXR5IjoiYWRtaW4iLCJpc3MiOiJpYW0tYXBpc2VydmVyIiwib3JpZ19pYXQiOjE2MzUw…

拼团系统开发|全民拼购商业模式解读

拼团系统开发|拼团模式在市场上已经屡见不鲜&#xff0c;某夕夕就是这方面的典范。不过现在市场上又出现一种升级版的拼团商业模式&#xff0c;也就是全民拼购&#xff0c;它除了可以帮助商家提升销量&#xff0c;还有引流裂变获客的效果&#xff0c;因此受到了许多企业商家的热…

chatgpt教你练习前端算法

今天想试试chatgpt关于代码算法这一块儿是否好用。 判断质数 上面的代码有一点小问题&#xff0c;当num为2时&#xff0c;返回的结果是错误的&#xff0c;我改进了一下&#xff0c;并优化了一点性能 // 判断是否是素数&#xff08;质数&#xff09; function isprime(number)…

【Linux】用LCD文字祝愿(Framebuffer+Freetype)

目录 前言 一、LCD操作原理 &#xff08;1&#xff09;LCD和Framebuffer。 &#xff08;2&#xff09;LCD的操作&#xff1a; &#xff08;3&#xff09;核心函数&#xff08;后续也会经常用到&#xff09; ①open函数 ②ioctl函数 ③mmap函数 二、字符的点阵显示 &a…

4K高清修复,模糊视频4k修复是怎么实现的?

在当今数字时代&#xff0c;高分辨率视频已成为大众观影的标配。4K分辨率作为其中高端的选项&#xff0c;提供了比传统1080p高出四倍的细节和清晰度&#xff0c;使得观众们能够更加身临其境地享受影视作品。然而&#xff0c;有时候我们可能会遇到4K视频质量不佳的问题&#xff…

Chapter3-用适合的方式发送和接收消息

3.1 不同类型的消费者 消费者可分为两种类型。 一个是DefaultMQPushConsumer &#xff0c;由系统控制读取操作&#xff0c;收到消息后自动调用传人的处理方法来处理&#xff1b;另 一个是 DefaultMlConsumer &#xff0c;读取操作中的大部分功能由使用者自主控制 。 3.1.1 Def…

uni-app:登录与支付--用户信息

用户信息 实现用户头像昵称区域的基本布局 在 my-userinfo 组件中&#xff0c;定义如下的 UI 结构&#xff1a; <template><view class"my-userinfo-container"><!-- 头像昵称区域 --><view class"top-box"><image src"…

如何通过小程序容器技术实现App的灰度发布

在当今移动应用市场竞争激烈的环境下&#xff0c;如何更快地发布新版本、更精确地测试和调整、更好地了解用户需求和行为&#xff0c;成为了每个App开发者面临的重要挑战。在这个背景下&#xff0c;灰度发布和小程序容器技术成为了越来越受欢迎的解决方案。 灰度发布是指将新版…

【Linux高性能服务器编程】I/O复用的高级应用

文章目录一、基于 select 的非阻塞 connect二、基于 poll 的聊天室程序2.1 客户端2.2 服务器三、基于 epoll 实现同时处理 TCP 和 UDP 服务一、基于 select 的非阻塞 connect connect系统调用的 man 手册中有如下一段内容&#xff1a; EINPROGERESS The socket is nonblocking…