当前位置: 首页 > news >正文

#QT(TCP网络编程-服务端)

1.IDE:QTCreator


2.实验:编写一个tcp服务端

QTcpsever

QTcpsocket


3.记录:

(1)先搭建界面

(2)服务端代码

a.           pro

QT       += core gui networkgreaterThan(QT_MAJOR_VERSION, 4): QT += widgetsCONFIG += c++17# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0SOURCES += \main.cpp \widget.cppHEADERS += \widget.hFORMS += \widget.ui# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

b.               widget.h

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QTcpServer>       //加入头文件
#include <QTcpSocket>
QT_BEGIN_NAMESPACE
namespace Ui {
class Widget;
}
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();QTcpServer *tcpsever;    //定义两个指针对象QTcpSocket *tcpsocket;
private slots:void on_openserver_pb_clicked();void new_conneciton_slot();   //server新的连接处理关联函数void readyRead_slot();       //socket准备读关联函数void on_closeserver_pb_clicked();void on_send_pb_clicked();private:Ui::Widget *ui;
};
#endif // WIDGET_H

c.           widget.cpp

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);tcpsever = new QTcpServer(this);    //指针赋值tcpsocket = new QTcpSocket(this);connect(tcpsever,SIGNAL(newConnection()),this,SLOT(new_conneciton_slot()));   //新的连接函数关联
}Widget::~Widget()
{delete ui;
}void Widget::new_conneciton_slot()    //新的连接处理函数
{tcpsocket=tcpsever->nextPendingConnection();connect(tcpsocket,SIGNAL(readyRead()),this,SLOT(readyRead_slot()));    //关联socket准备读函数
}
void Widget::readyRead_slot()        //socket准备读关联函数
{QString receive_buff;     //定义一个接受数组receive_buff=tcpsocket->readAll();    //读取所有接受的内容ui->receive_line->appendPlainText(receive_buff);   //在接收区显示接收到的内容
}void Widget::on_openserver_pb_clicked() //打开服务器按钮按下处理函数
{tcpsever->listen(QHostAddress::Any,ui->com_number->text().toUInt());    //监听主机上的所有端口,将端口号转为无符号整型
}void Widget::on_closeserver_pb_clicked() //关闭服务器按钮按下处理函数
{tcpsever->close();
}void Widget::on_send_pb_clicked()       //当发送按钮按下时处理函数
{tcpsocket->write(ui->send_line->text().toLocal8Bit().data());
}


4.代码

相关文章:

  • Spring Cloud原理详解
  • 如何解决代理ip服务器连接问题
  • <商务世界>《第4课 130家央企名录》
  • 【论文精读】TextDiffuser-2:释放语言模型用于文本渲染的力量
  • 解决前端性能问题:如何优化大量数据渲染和复杂交互?
  • Linux操作系统的vim常用命令和vim 键盘图
  • 并发编程中常见的设计模式,c++多线程如何设计
  • 微服务间通信重构与服务治理笔记
  • [Python人工智能] 四十二.命名实体识别 (3)基于Bert+BiLSTM-CRF的中文实体识别万字详解(异常解决中)
  • 探索程序员职业迷宫:选择适合自己的职业赛道
  • 【论文阅读】Mamba:选择状态空间模型的线性时间序列建模(二)
  • FFmpeg【SDK02】关于AVIO的一些使用
  • Jenkins设置使用163邮箱发送邮件
  • html基本标签
  • 【力扣经典面试题】14. 最长公共前缀
  • 0基础学习移动端适配
  • Android开发 - 掌握ConstraintLayout(四)创建基本约束
  • jquery ajax学习笔记
  • node学习系列之简单文件上传
  • OSS Web直传 (文件图片)
  • spark本地环境的搭建到运行第一个spark程序
  • Spring Cloud Feign的两种使用姿势
  • SpringCloud集成分布式事务LCN (一)
  • vue脚手架vue-cli
  • 持续集成与持续部署宝典Part 2:创建持续集成流水线
  • 给自己的博客网站加上酷炫的初音未来音乐游戏?
  • 关于 Cirru Editor 存储格式
  • 关于Android中设置闹钟的相对比较完善的解决方案
  • 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽
  • 智能合约开发环境搭建及Hello World合约
  • 阿里云移动端播放器高级功能介绍
  • ​渐进式Web应用PWA的未来
  • #pragma pack(1)
  • #经典论文 异质山坡的物理模型 2 有效导水率
  • #图像处理
  • (C#)Windows Shell 外壳编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令...
  • (二)正点原子I.MX6ULL u-boot移植
  • (七)Java对象在Hibernate持久化层的状态
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • (转)LINQ之路
  • (转)linux自定义开机启动服务和chkconfig使用方法
  • ./和../以及/和~之间的区别
  • .bat批处理(四):路径相关%cd%和%~dp0的区别
  • .net core 微服务_.NET Core 3.0中用 Code-First 方式创建 gRPC 服务与客户端
  • .NET MVC、 WebAPI、 WebService【ws】、NVVM、WCF、Remoting
  • .NET 发展历程
  • .Net6使用WebSocket与前端进行通信
  • .NET8.0 AOT 经验分享 FreeSql/FreeRedis/FreeScheduler 均已通过测试
  • .NET企业级应用架构设计系列之结尾篇
  • @SpringBootApplication 包含的三个注解及其含义
  • [ 常用工具篇 ] AntSword 蚁剑安装及使用详解
  • []Telit UC864E 拨号上网
  • [20180129]bash显示path环境变量.txt
  • [2024] 十大免费电脑数据恢复软件——轻松恢复电脑上已删除文件