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

news/2025/2/11 15:38:11/

目录

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_OBJECTpublic: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.ppmy.cn/news/44006.html

相关文章

【cmake篇】install 命令

install 命令用于指定文件的输出路径&#xff0c;这个文件可以是二进制执行文件、动态库文件、静态库文件&#xff0c;甚至是目录。通俗的来讲&#xff0c;install 其实就是把生成的文件统一拷贝到某个目录下&#xff0c;方便打包或者转移。 install 在不同场合&#xff0c;使…

AI绘画兴起,Stable Diffusion脱颖而出,来一探究竟

近几年&#xff0c;AI图像生成风靡全球&#xff0c;它能够根据文字描述生成精美图像&#xff0c;这极大地改变了人们的图像创作方式。众多专业人士说该技术正在引领着新一轮深度学习创意工具浪潮&#xff0c;并有望彻底改变视觉媒体的创作。 AI绘画兴起 Stable Diffusion脱颖…

c++中的函数模版

&#x1f436;博主主页&#xff1a;ᰔᩚ. 一怀明月ꦿ ❤️‍&#x1f525;专栏系列&#xff1a;线性代数&#xff0c;C初学者入门训练&#xff0c;题解C&#xff0c;C的使用文章&#xff0c;「初学」C &#x1f525;座右铭&#xff1a;“不要等到什么都没有了&#xff0c;才下…

人人可用的敏捷指标工具!Kyligence Zen 正式发布 GA 版

4 月 11 日&#xff0c;Kyligence 指标平台产品发布会成功召开。发布会上&#xff0c;一站式指标平台 Kyligence Zen 正式推出 GA 版&#xff0c;接下来这款人人可用的敏捷指标工具将以更加完善、成熟、稳定的产品性能与功能解决企业面临的指标管理、分析和应用痛点 &#xff0…

GDPU C语言 天码行空8

1. 求序列和 ⭐ 输出没有小数的浮点数 #include <stdio.h>double fun(int a, int n) {double res 0;int aa a,i;//aa 记录每一项for(i 1; i < n; i){res aa;aa aa * 10 a;}return res; }int main(){int a,n;scanf("%d %d", &a,&n);printf(&q…

【面试题】如何解决 Vue首屏加载过慢出现长时间白屏?

需求场景&#xff1a;公司业务展示官网开发&#xff0c;构建版本后在外网测试环境下&#xff0c;发下首屏加载损耗高达几十秒&#xff08;服务器在国外&#xff0c;所以也导致加载时间变长&#xff09;&#xff0c;于是采用了以下方法来达到提速目的。 大厂面试题分享 面试题库…

数据智能服务商奇点云完成近亿元C2轮融资

奇点云集团宣布已于2022年底完成近亿元C2轮融资&#xff0c;余杭国投领投&#xff0c;中银渤海基金跟投。 截至目前&#xff0c;奇点云共获近3亿元C轮融资。C轮领投方包括泰康人寿&#xff08;旗下泰康资产执行&#xff09;、余杭国投&#xff0c;跟投方包括字节跳动、德同资本…

DAF Trucks EDI项目案例

DAF Trucks是一家荷兰卡车制造商&#xff0c;通过EDI系统与其供应商和客户之间进行电子交换。DAF Trucks EDI系统包括订单处理、发货通知、发票和付款等功能&#xff0c;能够快速、准确地交换业务文档&#xff0c;提高供应链管理水平。DAF计划将其EDI系统扩展到更多的供应商和客…