自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 收藏
  • 关注

原创 Qt TCP简单通信

Qt实现TCP通信

2022-07-19 17:14:48 4884 1

原创 C++单例模式

单例:一个类只能创建一个对象实现步骤:1.将构造函数声明为类的私有成员 private;2.通过静态成员函数申请对象空间 ,并返回地址;3.定义一个静态变量标记,记录对象的个数,该静态成员变量是开关变量,通过控制这个静态标记达到控制只创建一个对象的目的;4.在析构函数中,将静态变量标记置成1,达到重复利用该静态变量标记目的;源代码:#include <iostream>using namespace std;// 单例模式,一个类只能创建一个对象class

2022-03-28 22:56:52 735

原创 Qt 多线程实现网络发送文件小功能

客户端给服务器发送文件,服务器进行接收文件的简单操作1. 服务器 1. 创建QTcpServer 类的对象QTcpServer * server = new QTcpServer(this); 2. 进行监听bool QTcpServer::listen(const QHostAddress &address = QHostAddress::Any, quint16 port = 0) 3. 通过接收 QTcpServer 发出的...

2021-09-28 16:31:09 1148 1

原创 Qt 简易版群聊器小功能

1. 群成员界面设计:在 signin.cpp 中的构造函数中 创建按钮// 1. 设置窗口名字、图标 this->setWindowTitle("QQ群聊器"); this->setWindowIcon(QIcon(":/img/qq_副本.png")); // 创建两个容器 分别存放网名 图片名 QList<QString> nameList; // 网名列表 nameList << "星..

2021-09-23 16:21:05 714

原创 Qt 视频播放器

1. 界面布局:2. 调用 API 播放视频加载视频播放模板在 widget.h 中widget.cpp 中// 在构造函数处编写代码 // 实例化播放视频对象 this->player = new QMediaPlayer(this); // 实例化播放视频框框 this->videoWidget = new QVideoWidget(this); // 设置播放视频框框的大小 this->video...

2021-09-22 15:59:31 1206

原创 Qt 制作简易版音乐播放器

1. 界面设计:2. 设置背景图片// 1.重写绘图事件void Widget::paintEvent(QPaintEvent *event){ // 声明画家 QPainter painter(this); QPixmap pix = QString(":/img/002.jpeg"); // 设置图片伸缩 pix.scaled(this->width(), this->height()); // 贴背景图片 paint

2021-09-20 16:15:05 1221

原创 两个栈实现一个队列的功能

1. 栈:是限制的线性表插入删除必须在同一端完成。栈的特点:先进后出:入栈将数据沉入栈底,最上面的一个数据是栈顶,获取栈顶元素Top,之后要进行Pop 删除栈顶,才可以取到第二个数据。2. 队列:也是对线性表的一种限定,规定插入删除数据必须在异端完成。队列的特点: 先进先出,存数据的一端叫队尾,出数据的一端叫队头;入队:存数据; 出队:删除数据3. 利用两个栈实现一个队列的功能 -- 思路:...

2021-09-06 09:44:24 446

原创 平衡二叉树

4种旋转操作:1. 左左旋(LL)2. 左右旋(LR)3. 右右旋(RR)4. 右左旋(RL)创建二叉树实现下图操作:实现代码:#include <stdio.h>#include <stdlib.h>// 平衡二叉树,首先是有序二叉树,任意子树的高度差都小于等于1。// 定义二叉树节点结构体 typedef struct TreeNode{ int data; // 数据域 int height; // 记录...

2021-08-28 15:13:26 103

原创 UDP/IP 异步选择模型

实现步骤:异步选择模型是基于Windows消息机制的,也就是消息队列,Windows操作系统会为每个窗口创建一个消息队列并且维护1. 创建窗口: 创建窗口步骤: 第一步:创建窗口结构体:typedef struct tagWNDCLASSEXW { UINT cbSize; UINT style; WNDPROC lpfnWndProc; int cbClsExtra; int ...

2021-08-26 15:12:37 163

原创 二叉树遍历

有二叉树如下图:实现前序遍历(根左右): 1 2 4 3 5 7 8 9 6实现中序遍历(左根右): 4 2 1 7 5 9 8 3 6实现后序遍历(左右根): 4 2 7 9 8 5 6 3 1实现层...

2021-08-25 12:48:53 82

原创 UDP/IP 事件选择模型

事件选择模型核心:为每一个socket创建一个事件对象,将socket和对应的事件对象绑定到一起,并投递给操作系统,由操作系统帮我们进行监视,当对应的socket有响应,该对应的事件会被置成有信号,我们获取该信号,进行分类处理。UDP/IP 事件选择模型:UDP/IP 是面向非连接的,不可靠的,基于数据报的传输层协议;对于服务端只有一个socket(服务端socket),直接创建一个事件对象,将该socket和对应的事件对象进行绑定,并投递给系统,之后等待信号,获取信号,之后进行分类处理。

2021-08-24 11:11:16 327

原创 UDP/IP select模型

select模型服务端代码:UDP/IP: UDP/IP协议的C/S模型不存在傻等的问题,而select模型只是能让recvfrom更灵活一些 select 代码逻辑: 1.所有的socket装进一个集合FD_SET UDP只有一个socket即将服务端的socket装进集合中就可以了 2.通过select函数,检测中的socket集合中...

2021-08-21 15:20:41 562

原创 二叉树实现

中序遍历实现数组元素排序struct data arr[6] = { 100, "aa", 50, "bb", 40, "cc", 120, "dd", 110, "oo", 130, "qq" };实现输出:arr[6] = { 40, "cc", 50, "bb",100, "aa", 110, "oo", 120, "dd", 130, "qq" };代码:#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#in.

2021-08-21 11:05:27 51

原创 UDP/IP 基本C/S模型

UDP/IP 与 TCP/IP的区别:TCP/IP协议的特点: 面向连接的,可靠的,基于字节流的传输层协议。UDP/IP协议的特点: 面向非连接的,不可靠的,基于数据报的传输层协议。基本C/S模型 TCP/IP 服务端与客户端是 1对1关系;UDP/IP 服务端与客户端 可以是1对1,1对多 关系。基本C/S模型中服务端代码: UDP/IP: 是面向非连接的,所以不进行listen、a...

2021-08-20 15:40:31 237

原创 二叉树的存与遍历

实现如下图的中序遍历利用栈实现中序遍历:声明二维数组 类型为 struct treeNode* 定义一个移动的指针节点,记录要遍历的节点进行入栈、出栈代码:#include <stdio.h>#include <stdlib.h>/* 二叉树:是树形结构的一个重要类型 二叉树特点:是每个节点最多只能有两颗子树,且有左右之分 二叉树是n个有限元素的集合,该集合或者为空、或者由一个称为根(root) 的元素以及两不相交的、被分别称为左子树和.

2021-08-20 10:18:30 92

原创 队列 -- 双向循环链表实现

代码:#include <stdio.h>#include <stdlib.h>#include <stdbool.h>/* 队列--双向循环链表实现 通过对线性表的插入删除操作在异端完成 比如: 头插入对应的是尾删除 尾插入对应的是头删除 出数据的一端是队头,进数据的是队尾 栈: 先进后出 队列: 先进先出*/// 创建双向循环链表节点struct Node{ int a; struct Node* pPr.

2021-08-19 10:50:07 309

原创 TCP/IP 完成端口

完成端口是对重叠IO的直接优化在重叠IO上进行优化:1.创建完成端口HANDLE WINAPI CreateIoCompletionPort( _In_ HANDLE FileHandle, // 填 INVALID_HANDLE_VALUE _In_opt_ HANDLE ExistingCompletionPort, // 对现有i/o完成端口或空的句柄。 填NULL _In_ ULONG_PTR CompletionKey, // 填0

2021-08-18 16:06:22 211

原创 栈--双向循环链表实现

代码:#include <stdio.h>#include <stdlib.h>#include <stdbool.h>/* 栈 用双向循环链表实现栈 栈:是通过对线性表的插入删除操作在同一端完成(头添加,头删除 或者 尾添加,尾删除) 栈的特点: 先进先出 操作的一端叫栈顶,另一端叫栈底 栈的功能: 1.创建栈 stack 【C语言就是一个栈指针,相当于链表的头或者尾指针】 2.判断栈是否为空 isEmpty 【一.

2021-08-18 10:13:56 605

原创 重叠IO之完成例程

重叠IO事件通知与完成例程的区别:重叠IO事件通知:需要调用 WSAGetOverlappedResult,获取等到事件的结果,然后根据逻辑,进行分类处理;重叠IO完成例程:主要是通过处理WSARecv函数的回调函数,和处理WSASend函数的回调函数,不用进行循环去获取等待事件的结果,系统会自动调用回调函数进行处理,完成例程的性能更好回调函数:void CALLBACK CompletionROUTINE( IN DWORD dwError, // 错

2021-08-13 15:10:15 444

原创 俄罗斯方块

俄罗斯方块实现步骤:1.创建Win32窗口1.创建窗口结构体typedef struct tagWNDCLASSEXA { UINT cbSize; UINT style; WNDPROC lpfnWndProc; int cbClsExtra; int cbWndExtra; HINSTANCE hInstance; HICON hIcon; HCURSOR hCursor; HBRUSH

2021-08-12 21:59:47 314

原创 重叠IO之事件通知

重叠IO: 重叠IO是Windows提供的一种异步读写文件的机制 正常读写文件(socket本质就是文件操作),如recv,是阻塞的, 等协议缓存区中的数据全部复制进行自定义的buffer字符数组里, 函数才结束并返回复制的个数,写也一样,同一时间只能读写一个,其他的都被阻塞, 只能等读写操作完成之后阻塞才被解除 重叠IO机制读写,将读的指令以及自定义的buffer投给操作系统,然后函数直接返回,操作系统独立开个线程,...

2021-08-12 10:55:41 136

原创 TCP/IP网络模型之异步选择模型

异步选择模型是基于窗口实现窗口的创建如下:1.创建窗口结构体typedef struct tagWNDCLASSEXW { UINT cbSize; UINT style; WNDPROC lpfnWndProc; int cbClsExtra; int cbWndExtra; HINSTANCE hInstance; HICON hIcon; HCURSOR hCursor; HBRUSH

2021-08-04 15:19:45 231

原创 TCP/IP 事件选择模型

服务端:1.打开网络库int WSAStartup(WORD wVersionRequired, LPWSADATA lpWSAData);2.校验版本号2 != HIBYTE(wsaData.wVersion) || 2 != LOBYTE(wsaData.wVersion) // (检验版本号是 2.2)3.创建socket 套接字SOCKET socket(int af, int type, int protocol);4.绑定地址与端口号int bind(.

2021-08-01 15:12:00 292

原创 C语言 函数返回二维数组

#include <stdio.h>#include <stdlib.h>#include <string.h>#define N 5double** Link(double a, double b, double c, double d){ double** T = NULL; T = (double**)malloc(sizeof(double*)*N); if (NULL == T) return NULL; // 定义一个二维数组,为.

2021-07-30 12:59:16 3524

原创 TCP/IP select模型

select模型适用于服务端服务端:1.打开网络库int WSAStartup(WORD wVersionRequired, LPWSADATA lpWSAData);2.检验版本号2 != HIBYTE(wsaData.wVersion) || 2 != LOBYTE(wsaData.wVersion) // (检验版本号是 2.2)3.创建socket 套接字SOCKET socket(int af, int type, int protocol);4.绑定地址与

2021-07-25 14:49:41 387 3

原创 TCP/IP 基本C/S模型

服务端与客户端通信服务端:1.打开网络库int WSAStartup(WORD wVersionRequired, LPWSADATA lpWSAData);2.检验版本号2 != HIBYTE(wsaData.wVersion) || 2 != LOBYTE(wsaData.wVersion) (检验版本号是 2.2)3.创建socket 套接字SOCKET socket(int af, int type, int protocol);4.绑定地址与端口号int bi.

2021-07-23 13:38:54 161

原创 C++ 实现简陋版贪吃蛇

wall.h 文件:#pragma once#include <iostream>using namespace std;// 创建游戏墙壁的类class Wall{public: // 利用枚举设置墙的宽和高 enum { ROW = 26, COL = 26 }; // 声明初始化墙壁函数 void InitWall(); // 声明设置当前所在位置的符号的函数 void setWall(int x, int y, char c); //参数.

2021-07-20 16:02:08 166

原创 练习STL容器

演讲比赛小程序#include <iostream>#include <vector>#include <map>#include <algorithm>#include <deque>#include <numeric>#include <ctime>using namespace std;/* 演讲比赛 总共3轮比赛 总共有 ABCDEFGHIJKLMNOPQRSTUVWX 位选手 选

2021-07-14 11:12:06 75

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除