QTcpServer简单的TCP服务器连接
1、简介
简单实现控制TCP服务器获取连接的套接字。点击断开服务器即可关闭所有连接,最大连接数量为5个。
声明源文件
#include "mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent)
{//设置固定大小setFixedSize(1024,600);btnClearText = new QPushButton(this);btnCtrlServer = new QPushButton(this);textRecvBrowser = new QTextBrowser(this);//按键清空btnClearText->setGeometry(48,40,200,60);btnClearText->setText("清空浏览");//设置控制按钮btnCtrlServer->setGeometry(48, 40+40+30 , 200, 60);btnCtrlServer->setText("打开服务");//浏览处理textRecvBrowser->setGeometry(300, 40, 649, 500);//连接处理QObject::connect(btnClearText, SIGNAL(clicked()), this, SLOT(on_pushButton_textRecvBrowser()));QObject::connect(btnCtrlServer, SIGNAL(clicked()),this, SLOT(on_pushButton_ctrlTcpServer()));//TCP服务器处理tcpServer = new QTcpServer(this);QObject::connect(tcpServer, SIGNAL(newConnection()),this, SLOT(on_tcpServer_newConnectCallHandler()));//最大连接数量5个tcpServer->setMaxPendingConnections(5);tcpServer->listen(QHostAddress("127.0.0.1"), 80);if(tcpServer->isListening())btnCtrlServer->setText("关闭服务");elsebtnCtrlServer->setText("打开服务");}MainWindow::~MainWindow()
{delete btnClearText;delete btnCtrlServer;delete textRecvBrowser;delete tcpServer;
}//清空浏览记录
void MainWindow::on_pushButton_textRecvBrowser()
{textRecvBrowser->clear();
}//
void MainWindow::on_pushButton_ctrlTcpServer()
{//状态查询if(tcpServer->isListening()){//遍历所有数据foreach(QTcpSocket* tcpSocket, tcpSocketList){if(tcpSocket->state() == QAbstractSocket::ConnectedState)tcpSocket->close();//关闭连接}//tcpServer->close();}elsetcpServer->listen(QHostAddress::Any, 80);//监听状态if(tcpServer->isListening())btnCtrlServer->setText("关闭服务");elsebtnCtrlServer->setText("打开服务");
}//IPv6转换IPv4
QString convert_to_ipv4_addr(QHostAddress &addr)
{quint32 addr_origin = addr.toIPv4Address();QHostAddress addr_host = QHostAddress(addr_origin);QString addr_str = addr_host.toString();return addr_str;
}//新建连接
void MainWindow::on_tcpServer_newConnectCallHandler()
{while (tcpServer->hasPendingConnections()) {//获取连接QTcpSocket *tcpSocket = tcpServer->nextPendingConnection();//添加指针列表tcpSocketList.append(tcpSocket);//显示具体连接信息QHostAddress ipv6 = tcpSocket->peerAddress();textRecvBrowser->append(convert_to_ipv4_addr(ipv6) + ":" + QString::number(tcpSocket->peerPort()));//设置连接QObject::connect(tcpSocket, SIGNAL(readyRead()),this, SLOT(on_tcpSocket_readyRead()));QObject::connect(tcpSocket, SIGNAL(disconnected()), this, SLOT(on_tcpSocket_disconnected()));//qDebug() << "当前连接数量" << tcpSocketList.size();}}void MainWindow::on_tcpSocket_disconnected()
{QTcpSocket* socket = qobject_cast<QTcpSocket *>(sender()); //当前信息//断开所有连接if(socket->state() == QAbstractSocket::ConnectedState)socket->close();//关闭连接//断开连接则清除tcpSocketList.removeOne(socket);textRecvBrowser->append("已断开连接");qDebug() << "当前连接数量" << tcpSocketList.size();
}//
void MainWindow::on_tcpSocket_readyRead()
{QTcpSocket* socket = qobject_cast<QTcpSocket *>(sender()); // 取得当前socket对象socket->write("Hello",5);
// QMessageBox msgBox(this);// msgBox.setText("我是准备好读数据");
// msgBox.setWindowTitle("提示");
// msgBox.exec();
}
声明的头文件
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QPushButton>
#include <QTextBrowser>
#include <QTcpServer>
#include <QTcpSocket>
#include <QHostAddress>
#include <QMessageBox>
#include <QDebug>class MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private slots:void on_pushButton_textRecvBrowser();void on_pushButton_ctrlTcpServer();void on_tcpServer_newConnectCallHandler();void on_tcpSocket_readyRead();void on_tcpSocket_disconnected();
private:QList<QTcpSocket *> tcpSocketList;QPushButton *btnCtrlServer = nullptr;QPushButton *btnClearText = nullptr;QTextBrowser *textRecvBrowser = nullptr;QTcpServer *tcpServer = nullptr;
};
#endif // MAINWINDOW_H
相关文章:
QTcpServer简单的TCP服务器连接
1、简介 简单实现控制TCP服务器获取连接的套接字。点击断开服务器即可关闭所有连接,最大连接数量为5个。 声明源文件 #include "mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent) {//设置固定大小setFixedSize(1024,600);b…...
LeetCode热题100——双指针
双指针 1.移动零2.盛最多水的容器3.三数之和 1.移动零 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 // 题解:使用双指针,其中快指针指向非零元素,慢指针指向首个零元素下…...
Ubuntu ARMv8编译Qt源码以及QtCreator
最近需要在NVIDIA小盒子上面跑一个程序,一开始想着在Ubuntu x64下交叉编译一版,后来发现libqxcb.so 这个库在configure时就会一直报错,多方查找怀疑可能是由于硬件不支持在x64环境下编译AMR架构的xcb库。 所以最后在ARM下直接编译Qt源码了&am…...
虚机Centos忘记密码如何重置
1进入开机前的页面,选中第一个,按“e”键,进入编辑模式 2找到ro crashkernel项,将ro替换成 rw initsysroot/bin/sh 3 Ctrlx mount -o remount, rw / chroot /sysroot chroot /sysroot passwd root 输入两次密码 touch /.a…...
OpenGL_Learn02
1. 监听窗口,绑定回调函数 #include <glad/glad.h> #include <GLFW/glfw3.h> #include <iostream>void framebuffer_size_callback(GLFWwindow* window, int width, int height) {glViewport(0, 0, width, height);std::cout << "变了…...
基于STC系列单片机实现外部中断0控制按键调节定时器0产生PWM(脉宽调制)的功能
#define uchar unsigned char//自定义无符号字符型为uchar #define uint unsigned int//自定义无符号整数型为uint sbit PwmOut P1^0;//位定义脉宽调制输出为单片机P1.0脚 uchar PwmTimeCount;//声明脉宽调制时间计数变量 uchar PwmDutyCycle;//声明脉宽调制占空比变量 void Ti…...
vue3中 reactive和ref的区别
在Vue 3中,reactive和ref都是用于响应式数据的API。它们的主要区别在于使用方式和返回值类型。 reactive: reactive函数用于将一个对象转换为响应式对象。它接收一个普通的JavaScript对象,并返回一个被代理的响应式对象。这意味着当响应式对…...
docker的安装部署nginx和mysql
小白自己整理,如有错误请指示! 自我理解:docker就是把应用程序所用的依赖程序,函数库等相关文件打包成镜像文件,类似系统光盘,然后可以在任意电脑上安装使用(方便运维人员部署程序)…...
测试C#调用Aplayer播放视频(1:加载Aplayer控件)
微信公众号“Dotnet跨平台”的文章《开源精品,使用 C# 开发的 KTV 点歌项目》中使用了迅雷开源APlayer播放引擎。最近在学习有哪些能拿来播放视频的组件或控件,于是准备试试,根据文章中的介绍,在迅雷APlayer播放引擎网站中下载了A…...
二叉树的遍历+二叉树的基本操作
文章目录 二叉树的操作一、 二叉树的存储1.二叉树的存储结构 二、 二叉树的基本操作1.前置创建一棵二叉树:1. 定义结点 2.简单的创建二叉树 2.二叉数的遍历1.前序遍历2.中序遍历3.后序遍历4.层序遍历 3.二叉树的操作1.获取树中节点的个数2.获取叶子节点的个数3.获取…...
Go 语言gin框架的web
节省时间与精力,更高效地打造稳定可靠的Web项目:基于Go语言和Gin框架的完善Web项目骨架。无需从零开始,直接利用这个骨架,快速搭建一个功能齐全、性能优异的Web应用。充分发挥Go语言和Gin框架的优势,轻松处理高并发、大…...
Docker底层原理:Cgroup V2的使用
文章目录 检查 cgroup2 文件系统是否已加载检查系统是否已挂载 cgroup2 文件系统创建 cgroup2 层次结构查看 cgroup2 开启的资源控制类型启用 cgroup2 资源控制设置 cgroup2 资源限制加入进程到 cgroup2 检查 cgroup2 文件系统是否已加载 cat /proc/filesystems | grep cgroup…...
历年上午真题笔记(2014年)
解析:A 网络设计的三层模型 : 接入层:Layer 2 Switching,最终用户被许可接入网络的点,用户通过接入层可以访问网络设备。 汇聚层:Layer2/3 Switching,访问层设备的汇聚点,负责汇接配线单元,利用二、三层技术实现工作组分段及网络故障的隔离,以免对核心层网络设备造…...
数据库软考知识
分布式数据库透明性 封锁 加上共享锁之后只能加共享锁,加上排他锁之后,啥锁都不能加。 分布式数据库特性 伪传递定理 SQL函数定义,有点冷 来了奥,更冷 存储过程 很重要,下午第二大题也是数据库...
学习笔记|配对样本均数T检验|SPSS常用的快捷键|规范表达|《小白爱上SPSS》课程:SPSS第六讲 | 配对样本均数T检验
目录 学习目的软件版本原始文档配对样本均数T检验一、实战案例二、案例解析三、统计策略四、SPSS操作1、正态性检验2、配对样本T检验 五、结果解读六、规范报告1、规范表格2、规范文字 划重点Tips:SPSS常用的快捷键 学习目的 SPSS第六讲 | 配对样本均数T检验 软件版本 IBM S…...
python内置模块smtplib、email 发送电子邮件
一、简介 smtplib 是 Python 的标准库之一,用于发送电子邮件。它提供了一个简单的接口来连接到 SMTP(Simple Mail Transfer Protocol)服务器,并通过该服务器发送电子邮件。 email 是 Python 的标准库之一,用于处理电子…...
Qt使用QWebEngineView一些记录
1.关闭软件警告: Release of profile requested but WebEnginePage still not deleted. Expect troubles! 原因,系统退出关闭view,没有释放page。 解决办法:手动释放page 顺便把view也释放了。 Widget::~Widget() {updateIni…...
【2023.10.30练习】C语言-判断等式成立
计算机能力挑战初赛2020.20题 题目描述: 输入正整数A、B、C(0<A,B,C<10000),若用、-、*、/、%之一组成等式(即ABC,是上述运算符之一,),则输出“YES”,否则输出“NO”; 输入: 第一行输入…...
Wpf 使用 Prism 实战开发Day03
一.实现左侧菜单绑定 效果图: 1.首先需要在项目中创建 mvvm 的架构模式 创建 Models ,放置实体类。 实体类需要继承自Prism 框架的 BindableBase,目的是让实体类支持数据的动态变更! 例如: 系统导航菜单实体类 / <summary>/// 系统导航菜单实体类…...
JavaEE-cookie和session
本部分内容包括 cookie基本概念,sendcookies和getcookies代码; session基本概念,session实现登陆界面; 上述过程中涉及的代码如下: 1 import javax.servlet.ServletException; import javax.servlet.annotation.WebSe…...
Java 语言特性(面试系列1)
一、面向对象编程 1. 封装(Encapsulation) 定义:将数据(属性)和操作数据的方法绑定在一起,通过访问控制符(private、protected、public)隐藏内部实现细节。示例: public …...
模型参数、模型存储精度、参数与显存
模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...
HBuilderX安装(uni-app和小程序开发)
下载HBuilderX 访问官方网站:https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本: Windows版(推荐下载标准版) Windows系统安装步骤 运行安装程序: 双击下载的.exe安装文件 如果出现安全提示&…...
【C语言练习】080. 使用C语言实现简单的数据库操作
080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...
【HTTP三个基础问题】
面试官您好!HTTP是超文本传输协议,是互联网上客户端和服务器之间传输超文本数据(比如文字、图片、音频、视频等)的核心协议,当前互联网应用最广泛的版本是HTTP1.1,它基于经典的C/S模型,也就是客…...
全志A40i android7.1 调试信息打印串口由uart0改为uart3
一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...
Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信
文章目录 Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket(服务端和客户端都要)2. 绑定本地地址和端口&#x…...
宇树科技,改名了!
提到国内具身智能和机器人领域的代表企业,那宇树科技(Unitree)必须名列其榜。 最近,宇树科技的一项新变动消息在业界引发了不少关注和讨论,即: 宇树向其合作伙伴发布了一封公司名称变更函称,因…...
FFmpeg:Windows系统小白安装及其使用
一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】,注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录(即exe所在文件夹)加入系统变量…...
Qt 事件处理中 return 的深入解析
Qt 事件处理中 return 的深入解析 在 Qt 事件处理中,return 语句的使用是另一个关键概念,它与 event->accept()/event->ignore() 密切相关但作用不同。让我们详细分析一下它们之间的关系和工作原理。 核心区别:不同层级的事件处理 方…...
