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

Qt中Socket网络编程

文章目录

  • Qt中Socket网络编程
    • 服务器端
    • 客户端

Qt中Socket网络编程

这里就拿b站上爱编程的小丙的demo来做总结吧,首先要感谢成功带我入门的人:爱编程的小丙和程序员长风,这两个人是讲Socket编程我听懂的课555,接下来就总结一下Qt中的socket编程

项目源码: ProgramList/QtClient at main · sadlong/ProgramList 和
ProgramList/QtServer at main · sadlong/ProgramList

跟用普通的C/C++的通信demo一样,都是服务器端的代码要难写一点

服务器端

首先包含头文件并定义以下成员属性:

#include <QTcpServer>
#include <QTcpSocket>QTcpServer* m_s;	//用于监听
QTcpSocket* m_tcp;

创建监听的服务器对象:

m_s = new QTcpServer(this);

核心实现步骤:

connect(m_s, &QTcpServer::newConnection, this, [=](){m_tcp = m_s->nextPendingConnection();   //一定要先实例化m_tcp 才能调用connect//重新设置图片状态m_status->setPixmap(QPixmap(":/t.jpg").scaled(20, 20)); //setPixmap设置图片 scaled让图片缩放connect(m_tcp, &QTcpSocket::readyRead, this, [=](){QByteArray data = m_tcp->readAll(); //全部读ui->recode->append("客户端说:" + data);   //追加信息});//是否断开连接connect(m_tcp, &QTcpSocket::disconnected, this, [=](){//套接字关闭 释放 切换图片m_tcp->close();m_tcp->deleteLater();m_status->setPixmap(QPixmap(":/f.jpg").scaled(20, 20)); //setPixmap设置图片 scaled让图片缩放});
});

与C++实现的socket编程不同,这里没有用到while循环,这里使用的是一个槽函数来代替的循环,当接收到客户端的连接后(&QTcpServer::newConnection)就执行里面的匿名函数,在这里面也有一个很讲究的点就是一定要先连接上了客户端再实例化成员属性m_tcp,然后才能基于m_tcp来实现其它的槽函数(例如读写操作)。

常用的函数

  • &QTcpServer::newConnection连接信号

  • m_s->nextPendingConnection()实例化m_tcp

  • m_status->setPixmap(QPixmap(":/t.jpg").scaled(20, 20))m_status是QLable类型setPixmap设置图片,scaled()放缩图片长宽

  • &QTcpSocket::readyRead读信号

  • &QTcpSocket::disconnected断开连接信号

点击开始监听事件

void MainWindow::on_setListen_clicked()
{unsigned short port = ui->port->text().toUShort();  //转换类型unsigned shortm_s->listen(QHostAddress::Any, port);   //绑定本机ip地址any为任意ipui->setListen->setDisabled(true);   //点击完之后设置成不可用
}

port的类型通常都是unsigned short类型的

  • ui->port->text().toUShort()类型转换,讲QString类型的text转化为unsigned short类型
  • listen(QHostAddress::Any, port)监听函数,参数一:主机ip地址 参数二:端口号
  • QHostAddress::Any表示任意ip地址
  • setDisabled(true)这个函数主要针对的是pushButton控件,当点击完开始监听后设置按钮变成不可选中,这一点很实用

客户端

大致还是和服务器端相似,但是没有了监听的步骤。

头文件和成员属性:

#include <QMainWindow>
#include <QTcpSocket>
#include <QLabel>
#include <QHostAddress>QTcpSocket* m_tcp;
QLabel* m_status;	//用于设置状态的,提示是否连接的

核心实现代码:

m_tcp = new QTcpSocket;connect(m_tcp, &QTcpSocket::readyRead, this, [=](){QByteArray data = m_tcp->readAll(); //全部读ui->recode->append("服务器说:" + data);   //追加信息
});connect(m_tcp, &QTcpSocket::disconnected, this, [=](){//套接字关闭 释放 切换图片m_tcp->close();m_tcp->deleteLater();m_status->setPixmap(QPixmap(":/f.jpg").scaled(20, 20)); //setPixmap设置图片 scaled让图片缩放ui->recode->append("服务器已经和客户端断开了连接...");ui->disconbine->setDisabled(true);ui->conbine->setEnabled(true);
});connect(m_tcp, &QTcpSocket::connected, this, [=](){m_status->setPixmap(QPixmap(":/t.jpg").scaled(20, 20)); //setPixmap设置图片 scaled让图片缩放ui->recode->append("已经成功连接到服务器...");ui->disconbine->setEnabled(true);ui->conbine->setDisabled(true);
});//状态栏
m_status = new QLabel;
m_status->setPixmap(QPixmap(":/f.jpg").scaled(20, 20)); //setPixmap设置图片 scaled让图片缩放
ui->statusbar->addWidget(new QLabel("连接状态:"));
ui->statusbar->addWidget(m_status);

在这里主要是对客户端连接和未连接的按钮能否选中进行了判断,总之就是连接服务器按钮和断开连接按钮是对立的,仅仅只能有一个可以选中,然后就是状态栏控件QLable的介绍,这好像是默认显示在左下角的一个控件,通用是通过信号槽的是否连接动态来显示图片。

  • addWidget(new QLabel("连接状态:"))添加控件,应该默认的是水平布局

相关文章:

Qt中Socket网络编程

文章目录 Qt中Socket网络编程服务器端客户端 Qt中Socket网络编程 这里就拿b站上爱编程的小丙的demo来做总结吧&#xff0c;首先要感谢成功带我入门的人&#xff1a;爱编程的小丙和程序员长风&#xff0c;这两个人是讲Socket编程我听懂的课555&#xff0c;接下来就总结一下Qt中…...

【05】Selenium+Python 两种文件上传方式(AutoIt)

上传文件的两种方式 一、input标签上传文件 可以用send_keys方法直接上传文件 示例代码 input标签上传文件import time from selenium import webdriver from chromedriver_py import binary_path # this will get you the path variable from selenium.webdriver.common.by i…...

Python网络编程

网络编程 Socket(套接字) socket 位于 网络协议中的 数据传输层、 该层 主要 可以通过 UDP 或者 TCP协议 实现 数据的传输 TCP 协议 VS UDP协议 tcp : 是一个 可靠的 &#xff0c;面向 连接的协议。 数据在网络传输中 是安全的&#xff0c;不易丢失的。 TCP连接 在建立的时候&…...

openssl生成ca证书

常见CA文件夹 1、生成CA钥匙 openssl genrsa -out ./private/cakey.pem 2、生成CA自签名 openssl req -new -x509 -key ./private/cakey.pem -out ./cacert.crt -days 3650 3、生成http服务器私钥 openssl genrsa -out ./data/frontt.project.com.key 2048 4、CA给http服务器…...

Oracle RAC 环境下数据文件误建在本地目录的处理过程

问题描述 在 Oracle RAC 环境中&#xff0c;有时会误将数据文件创建在本地目录&#xff0c;导致其他节点无法访问该数据文件&#xff0c;从而报出 ORA-01157 和 ORA-01110 错误。 问题分析 错误日志 Mon Nov 16 19:02:38 2021 Errors in file /u01/app/oracle/diag/rdbms/orc…...

新质驱动·科东软件受邀出席2024智能网联+低空经济暨第二届湾区汽车T9+N闭门会议

为推进广东省加快发展新质生产力&#xff0c;贯彻落实“百县千镇万村高质量发展工程”&#xff0c;推动韶关市新丰县智能网联新能源汽车、低空经济与数字技术的创新与发展&#xff0c;充分发挥湾区汽车产业链头部企业的带动作用。韶关市指导、珠三角湾区智能网联新能源汽车产业…...

windows11 使用体验记录

好的地方&#xff1a; UI上字体风格貌似更好看了&#xff0c;文件夹增加了多个标签&#xff0c;类似于浏览器既可以打开多个窗口&#xff0c;也可以在同一个窗口中打开多个标签页 不好的地方&#xff1a; 桌面右下角点击日期时间&#xff0c;显示日期&#xff0c;时间呢&…...

202页MES项目需求方案深入解读,学习MES系统设计规划

202页MES项目需求方案深入解读&#xff0c;学习MES系统设计规划 MES项目需求方案旨在实现制造执行、效率提升、精细化管理等多个方面的功能。整体结构分为七大部分&#xff0c;包括制造执行、效率、精细化、品质在线、设备、用户思想和数据互联。制造执行部分关注订单、品质数据…...

前端css实例

前端css实例 一、带条纹的表格 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>条纹样式的表格<…...

YOLO的框架及版本迭代

YOLO&#xff08;You Only Look Once&#xff09;是一种非常流行的实时目标检测算法&#xff0c;其特点是将目标检测任务转换为一个回归问题&#xff0c;通过一次前向传播就可以同时完成目标的分类和定位。以下是YOLO框架的整体架构和工作原理&#xff1a; 一、YOLO的基本框架…...

PotPlayer 最新版本支持使用 Whisper 自动识别语音生成字幕

PotPlayer 最新版本支持使用 Whisper 自动识别语音生成字幕 设置使用下载地址 设置 使用 下载地址 https://www.videohelp.com/software/PotPlayer...

JavaScript零基础入门速通(中)

目录 1. 函数 1.1 函数声明 1.2 返回值 1.3 匿名函数 1.4 箭头函数 2. 对象 2.1 创建对象 2.2 访问和修改对象的属性 2.3 对象方法 3. 数组 3.1 创建数组 3.2 数组方法 3.3 遍历数组 4. 作用域 4.1 全局作用域 4.2 局部作用域 4.3 块级作用域 5. 事件处理 5…...

【Yarn Bug】 yarn 安装依赖出现的网络连接问题

最近&#xff0c;在初始化 Ant Design Pro 前端脚手架过程中&#xff0c;使用 yarn 安装依赖时遇到了网络连接问题&#xff0c;具体错误信息提示为 info There appears to be trouble with your network connection. Retrying...。通过百度查询&#xff0c;得知出现这种问题的原…...

字节青训Marscode_5:寻找最大葫芦——最新题解

步骤1&#xff1a;问题定义与分析 输入条件&#xff1a; 整数n&#xff1a;牌的数量整数max&#xff1a;葫芦牌面值之和的上限数组array&#xff1a;n张牌的牌面值 输出条件&#xff1a; 两个整数组成的数组[a,b]&#xff1a; a表示三张相同牌的牌面值b表示两张相同牌的牌面值如…...

MySQL —— MySQL 程序

目录 前言 一、MySQL 程序简介 二、mysqld -- MySQL 服务器 三、mysql -- MySQL 客户端 1. mysql 客户端简介 2. mysql 客户端选项 &#xff08;1&#xff09;指定选项的方式 &#xff08;2&#xff09;mysql 客户端命令常用选项 &#xff08;3&#xff09;在命令行中使…...

LLamafactory API部署与使用异步方式 API 调用优化大模型推理效率

文章目录 背景介绍第三方大模型API 介绍LLamafactory 部署API大模型 API 调用工具类项目开源 背景介绍 第三方大模型API 目前&#xff0c;市面上有许多第三方大模型 API 服务提供商&#xff0c;通过 API 接口向用户提供多样化的服务。这些平台不仅能提供更多类别和类型的模型…...

不玩PS抠图了,改玩Python抠图

网上找了两个苏轼的印章图片&#xff1a; 把这两个印章抠出来的话&#xff0c;对于不少PS高手来说是相当容易&#xff0c;但是要去掉其中的水印&#xff0c;可能要用仿制图章慢慢描绘&#xff0c;图章的边缘也要慢慢勾画或者用通道抠图之类来处理&#xff0c;而且印章的红色也不…...

三维渲染中顺序无关的半透明混合(OIT)(一Depth Peeling)

>本文收集关于透明对象渲染技术中关于OIT技术的资料&#xff0c;尝试用简单的逻辑对这些内容进行整理。 1、透明对象的特殊对待 不要小瞧png图片和jpg图片的差异&#xff01;在一般的三维平台&#xff0c;png代表的是带透明通道的纹理&#xff0c;而jpg代表的是不带透明的…...

Linux零基础入门--Makefile和make--纯干货无废话!!

目录 Makefile的概念与使用 Makefile的编写 多个源文件的Makefile编写 Makefile的概念与使用 Makefile其实是linux中的一种包含构建指令的文件&#xff0c;用于自动化构建 一个工程中的源文件不计数&#xff0c;其按类型、功能、模块分别放在若干个目录中&#xff0c;makefi…...

vim编辑器的一些配置和快捷键

记录vim编辑器的一些配置和快捷键&#xff0c;边学边用&#xff1a; yy 复制dd 删除p&#xff1a;粘贴ctrly 取消撤销u&#xff1a;撤销:w 写入:q 退出a/i 插入O: 上方插入一个空行o&#xff1a;下方插入一个空行:e 打开文件编辑 其他配置&#xff1a; 上移一行和下移一行&a…...

C++初阶-list的底层

目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...

【Linux】shell脚本忽略错误继续执行

在 shell 脚本中&#xff0c;可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行&#xff0c;可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令&#xff0c;并忽略错误 rm somefile…...

ES6从入门到精通:前言

ES6简介 ES6&#xff08;ECMAScript 2015&#xff09;是JavaScript语言的重大更新&#xff0c;引入了许多新特性&#xff0c;包括语法糖、新数据类型、模块化支持等&#xff0c;显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var&#xf…...

【位运算】消失的两个数字(hard)

消失的两个数字&#xff08;hard&#xff09; 题⽬描述&#xff1a;解法&#xff08;位运算&#xff09;&#xff1a;Java 算法代码&#xff1a;更简便代码 题⽬链接&#xff1a;⾯试题 17.19. 消失的两个数字 题⽬描述&#xff1a; 给定⼀个数组&#xff0c;包含从 1 到 N 所有…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序

一、开发环境准备 ​​工具安装​​&#xff1a; 下载安装DevEco Studio 4.0&#xff08;支持HarmonyOS 5&#xff09;配置HarmonyOS SDK 5.0确保Node.js版本≥14 ​​项目初始化​​&#xff1a; ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

Psychopy音频的使用

Psychopy音频的使用 本文主要解决以下问题&#xff1a; 指定音频引擎与设备&#xff1b;播放音频文件 本文所使用的环境&#xff1a; Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...

Swagger和OpenApi的前世今生

Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章&#xff0c;二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑&#xff1a; &#x1f504; 一、起源与初创期&#xff1a;Swagger的诞生&#xff08;2010-2014&#xff09; 核心…...

排序算法总结(C++)

目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指&#xff1a;同样大小的样本 **&#xff08;同样大小的数据&#xff09;**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...

深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用

文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么&#xff1f;1.1.2 感知机的工作原理 1.2 感知机的简单应用&#xff1a;基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...

解读《网络安全法》最新修订,把握网络安全新趋势

《网络安全法》自2017年施行以来&#xff0c;在维护网络空间安全方面发挥了重要作用。但随着网络环境的日益复杂&#xff0c;网络攻击、数据泄露等事件频发&#xff0c;现行法律已难以完全适应新的风险挑战。 2025年3月28日&#xff0c;国家网信办会同相关部门起草了《网络安全…...