当前位置: 首页 > 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. 最长公共前缀
  • SegmentFault for Android 3.0 发布
  • [NodeJS] 关于Buffer
  • 【Linux系统编程】快速查找errno错误码信息
  • C++11: atomic 头文件
  • CSS魔法堂:Absolute Positioning就这个样
  • Linux后台研发超实用命令总结
  • mongodb--安装和初步使用教程
  • Python学习之路16-使用API
  • Rancher如何对接Ceph-RBD块存储
  • React 快速上手 - 06 容器组件、展示组件、操作组件
  • SAP云平台运行环境Cloud Foundry和Neo的区别
  • Terraform入门 - 1. 安装Terraform
  • 表单中readonly的input等标签,禁止光标进入(focus)的几种方式
  • 创建一种深思熟虑的文化
  • 免费小说阅读小程序
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • 什么软件可以提取视频中的音频制作成手机铃声
  • 网络应用优化——时延与带宽
  • 问题之ssh中Host key verification failed的解决
  • 原创:新手布局福音!微信小程序使用flex的一些基础样式属性(一)
  • 原生Ajax
  • Unity3D - 异步加载游戏场景与异步加载游戏资源进度条 ...
  • 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google ...
  • ​渐进式Web应用PWA的未来
  • ​一、什么是射频识别?二、射频识别系统组成及工作原理三、射频识别系统分类四、RFID与物联网​
  • #Z2294. 打印树的直径
  • (2/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (5)STL算法之复制
  • (8)STL算法之替换
  • (delphi11最新学习资料) Object Pascal 学习笔记---第5章第5节(delphi中的指针)
  • (poj1.2.1)1970(筛选法模拟)
  • (动手学习深度学习)第13章 计算机视觉---图像增广与微调
  • (附源码)springboot 房产中介系统 毕业设计 312341
  • (附源码)ssm跨平台教学系统 毕业设计 280843
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • (转)C#开发微信门户及应用(1)--开始使用微信接口
  • (转)一些感悟
  • (自用)learnOpenGL学习总结-高级OpenGL-抗锯齿
  • ***检测工具之RKHunter AIDE
  • .Net6使用WebSocket与前端进行通信