![](https://img-blog.csdnimg.cn/54329e053d614d9e8212ee4cc85e42d7.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
C++网络编程
文章平均质量分 67
该栏主要是展示博主日常关于C++网络编程的所学知识以及见解,仅供参考。
ufgnix0802
这个作者很懒,什么都没留下…
展开
-
进阶对象池(不使用智能指针版)
进阶对象池(不使用智能指针版),使用智能指针实现对象池需要极其了解智能指针的特性,故参考GitHub上相关源码,封装一个不基于智能指针的对象池版本。该版本对象池的总体架构是不管一个对象是否被外部使用,本对象池仍然管理该对象。而有一些对象池的实现是只要外部使用,那么本对象池在那段时间是不记录该对象的。原创 2023-01-09 19:32:44 · 147 阅读 · 0 评论 -
C++ 内存分配接口
在我们日常开发中,调试阶段最关注的问题便是对内存管理,防止内存泄露。故在此特意封装内存分配接口,用于调试阶段管理内存。原创 2023-01-09 19:28:49 · 212 阅读 · 0 评论 -
时间函数(运行时间、执行时间、定时)
例如,要将一个很大的网络中(跨越若干个时区)的服务器同步,加入位于美国纽约的服务器和北京的服务器,其中一台服务器无须改变硬件时钟而只需设置一个临时的系统时钟,如要将北京服务器上的时间设置为纽约时间,两台服务器完成文件的同步后,再与原来的时钟同步一下即可。机器(硬件)时钟是存储在主板上CMOS里的时钟,关机后该时钟仍然在运行,主板的电池为它供电。机器(硬件)时钟又称实时时钟(Real Time Clock, RTC)或CMOS时钟,是独立的硬件设备(电池、电容元件等),保存的时间包括年、月、日、时、分、秒。原创 2022-12-27 16:40:19 · 730 阅读 · 0 评论 -
从游戏服务端角度分析移动同步(状态同步)
对于游戏服务端来说,针对状态同步主要需要考虑的是三大模块,即校验、模拟、计算。客户端输入的任何信息都需要进行校验,避免多人游戏作弊情况的发生。客户端在进行游戏的同时,服务端也同样进行游戏模拟,只不过对于服务端来说只有数据,且数据是离散的,而客户端不仅有数据,同时还有渲染表现。计算即对模拟的过程进行计算,比如已知速度时间求速度等。原创 2022-12-19 20:16:07 · 1353 阅读 · 0 评论 -
游戏服务端 - AOI九宫格算法
下面简述内容,只针对平面上的简易场景。我们将平面上的场景分为一个个格子(Grid),场景管理所有的Grid。如下(假设场景的长宽均为20,每个格子宽高定义为1)...原创 2022-12-19 20:14:36 · 918 阅读 · 0 评论 -
C++ 线程安全的日志接口
线程安全的日志接口,在多线程下可直接使用。原创 2022-12-05 19:45:42 · 671 阅读 · 0 评论 -
C++单例模板:使用宏函数实现
在我们日常开发中,无可避免需要使用单例模式进行设计类对象,那么实际上我们写单例格式基本都是一样的,那么每次都要写几乎一模一样的代码来实现我们需要的单例对象是不是会觉得很累?原创 2022-11-30 20:30:07 · 688 阅读 · 0 评论 -
C++11 封装线程类
在我们的日常开发过程中,难免会开线程,那为何不将其封装为一个类对象,而我们在使用的过程中也不需要在书写一些重复的代码,只需实例化类对象即可使用。原创 2022-11-27 20:38:51 · 784 阅读 · 0 评论 -
EventSystem(事件派发-观察者模式)
可自定义主题(结构体),对应观察者事件可以通过订阅主题收到发布者消息,同时该主题也作为消息结构传入发布者事件中。原创 2022-11-13 22:04:12 · 165 阅读 · 0 评论 -
C++ Log日志进阶
下面进阶版,将原本的全局日志方法封装为类,通过运算符重载来使用日志,更加便捷。原创 2022-10-31 20:58:28 · 452 阅读 · 0 评论 -
C++ 进阶对象池
以下对象池适用于更多的应用场景,可以根据需要定制不同的对象,包括1024字节(1k)、2 * 1024字节(2k)、4k、8k、16k、32k、64k对象。逻辑层面上也是说最多创建64k大小的对象,更大的对象直接返回nullptr。原创 2022-10-26 21:12:30 · 214 阅读 · 0 评论 -
C++ Log日志
在我们平常使用C++开发项目的过程中,报错信息能使用如那么每当我们在不同的环境下就要使用不同的日志接口去处理是否会觉得比较麻烦?故博主基于一定的思维,建立起简单的Log接口用于规范日志信息。原创 2022-10-22 21:20:49 · 663 阅读 · 0 评论 -
C++ typedef、using和std::bind
在使用std::bind绑定类的成员函数的时候出现以下情况...原创 2022-10-13 21:55:02 · 406 阅读 · 0 评论 -
C++ 游戏服务端代码分层
在正在大型低游戏服务端开发过程中,为了提高代码的可读性,以及降低维护成本,是必须要对代码进行分层的。原创 2022-09-08 23:13:11 · 1193 阅读 · 0 评论 -
C++ 网络通讯消息之编解码及序列化、反序列化
C++网络通讯消息处理包括编解码、序列化、反序列化四部基础步骤。原创 2022-09-05 21:46:20 · 643 阅读 · 0 评论 -
C++ 内存池
首先我们需要明确,内存碎片的目的到底是什么? 首先你要知道的是, 我们每次使用new T来初始化类型T的时候...原创 2022-08-05 21:59:08 · 522 阅读 · 0 评论 -
C++对象池
在智能指针需要释放的时候调用删除器,将对象重新放入对象池即可。原创 2022-08-04 22:40:01 · 1038 阅读 · 0 评论 -
C++服务端消息处理流程
需要进行编解码,或者说在编解码之前如果不为一个完整的数据包,应该进行拼包操作,而且如果发送端一次性发送多个数据包,也可以进行凭借编解码进行逐一解析操作。原创 2022-08-04 22:35:56 · 419 阅读 · 0 评论 -
基于select模型内核实现简易http服务器
基于select模型内核实现简易http服务器。原创 2022-07-06 22:04:58 · 271 阅读 · 0 评论 -
HTTP协议(详解)
HTTP协议:全称为Hyper Text Transfer Protocol(超文本传输协议)。HTTP协议是用于从(WWW:World Wide Web,简称万维网)服务器传输超文本到本地浏览器的传输协议。HTTP协议工作于B/S架构上,浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务端发送请求(Request)。Web服务端根据接收到的请求数据后,向客户端发送响应信息(Response)。HTTP协议是基于TCP/IP通信协议来传输数据。...转载 2022-07-03 20:53:50 · 57014 阅读 · 0 评论 -
C++ select模型聊天室 - 进阶
新增内容TIPS:实现功能部分没有增加,功能与初级版本效果展示部分相同。1. 服务端代码进一步封装TcpConnecter,将客户端socket句柄进行封装,不暴露给TcpServer类。2. 服务端构建发送缓冲区,与接收缓冲区相呼应。同时封装send()函数,使用select的写方法进行监听是否可写,结合发送缓冲区进行使用。3. 客户端同上第2点,封装send()函数,使用select的写方法进行监听是否可写以及构建发送缓冲区。......原创 2022-06-16 22:22:48 · 320 阅读 · 0 评论 -
帧同步原理
帧同步原理参考文章链接如下:https://blog.csdn.net/SilenceCoder/article/details/86234480https://www.gameres.com/774540.htmlhttps://blog.csdn.net/wangchewen/article/details/120511500常见游戏同步方案 同步问题的本质是一致性的问题,在同一局游戏的过程中,玩家A看到玩家B的状态,应该跟玩家B自身看到自己的状态相一致。延迟是造成不一致的本质原因,假转载 2022-05-20 10:39:31 · 2477 阅读 · 0 评论 -
C语言dll动态链接库
C语言dll动态链接库vs中dumpbin工具的使用参考链接:https://blog.csdn.net/DoronLee/article/details/78284837 用vs生成的.obj文件、.lib库、.dll动态链接库、.exe执行文件,如果想查看其中这些文件或库包含哪些函数(比如.dll库有哪些导出函数)以及相关的信息(符号清单),可以通过vs自带的dumpbin工具来完成。 dumpbin.exe为Microsoft COFF二进制文件转换器,它显示有关通用对象文件格式(CO原创 2022-04-20 21:18:11 · 2161 阅读 · 0 评论 -
C++ select模型聊天室初版
C++ select模型聊天室初版需要了解知识点memmove与memcpy的区别 memmove可以防止内存重叠。 比如:abcdef,目前需要删除ab,然后将cdef往前移动,有些系统的内存移动机制可能存在从后往前移动,比如先把f移动到d所在位置,然后将e移动到c所在位置,但是当我们要把d移动到b所在位置的时候,我们发现d已经是f了,也就变成了把f移动到b,同理本来是把c移动到a所在位置,却变成了把e移动到a所在位置,最终的数据移动操作变成了efef。 而memmove可以强制要求从前往原创 2022-04-13 20:24:51 · 640 阅读 · 0 评论 -
C++ select模型简单聊天室
C++ select模型简单聊天室TIPS:以下使用CMake项目进行开发。关于何为CMake,链接:https://blog.csdn.net/qq135595696/article/details/124052273简单聊天室效果展示[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bDMBn3Ri-1649842308734)(https://audioandvideo.ufgnix0802.cn/resources/%E5%9F%BA%E4%BA%8Eselec原创 2022-04-13 20:20:23 · 904 阅读 · 0 评论 -
C++ select模型详解(多路复用IO)
C++ select模型详解(多路复用IO)TIPS:以下内容纯属博主自主查阅资料并结合个人理解得出,各位读者仅做参考即可。关于其它的IO模型可参考链接(阻塞I/O、非阻塞I/O、多路复用I/O、信号I/O、异步I/O):引言 在什么情况下需要使用select模型呢?阻塞I/O问题我们可以使用多线程处理或者将阻塞I/O改为非阻塞I/O,系统调用之后就返回结果,可是完成I/O(即获取数据),我们不得不使用polling(轮询),可每次轮询都是一次系统调用,这将导致一些情况下非阻塞I/O甚至不原创 2021-11-25 22:42:18 · 2608 阅读 · 0 评论 -
简要概述网络I/O与并发
简要概述网络I/O与并发以下内容可能存在错误,由博主自主查阅资料所得,仅作参考。 计算机的基本组成其实很简单,处理器,存储器加上输入输出设备就构成了计算机。大至超级计算机,小到手机发等都是一样的模型组成。计算的本质就是从输入设备读取数据处理后输出。可以理解计算机做的事就是IO和计算。 在网络发明之前,计算机从存储设备中读取数据,进程通过内存通道进行通信。互联网诞生之后,越来越多计算机通过互联网连接,将数据传输到世界各地。计算机之间可以通信,本质上也是计算机进程之间互相通信。为了方便不同终端进行原创 2021-11-25 22:38:03 · 3248 阅读 · 0 评论 -
C++11中的std::function和std::bind
C++11中的std::function和std::bind一、可调用对象可调用对象有以下几种定义:是一个函数指针。是一个具有operator()(运算符重载)成员函数的类对象可被转换成函数指针的类对象一个类成员函数指针 C++中可调用对象虽然都有一个比较统一的操作形式,但是定义方法五花八门,这样就导致使用统一的方式保存可调用对象或者传递可调用对象时,会十分繁琐。C++11中提供了std::function和std::bind统一了可调用对象的各种操作。不同的类型可能具有相同的调用形式原创 2021-11-22 22:02:45 · 937 阅读 · 0 评论 -
C++RAII惯用法:C++资源管理的利器
C++RAII惯用法:C++资源管理的利器 RAII是指C++中一种惯用法(idiom),它是《Resource Acquisition Initialization》的首字母缩写。中文可将其翻译为“资源获取就是初始化”。虽然从某种程度上说这个名称并没有体现出该惯性法的本质精神,但是作为标准C++资源管理中的关键技术,RAII早已在C++社群中深入人心。 RAII惯用法在Bjarne Stroustrup(本贾尼·斯特劳斯特卢普)的《C++程序设计语言》一书中有提及。当讲述C++资源管理时,Bjar转载 2021-11-18 22:21:46 · 672 阅读 · 0 评论 -
C++线程中的几类锁
C++线程中的几类锁 多线程中的锁主要有五类:互斥锁、条件锁、自旋锁、读写锁、递归锁。一般而言,所得功能与性能成反比。而且我们一般不使用递归锁(C++提供std::recursive_mutex),这里不做介绍。互斥锁 ==互斥锁用于控制多个线程对它们之间共享资源互斥访问的一个信号量。==也就是说为了避免多个线程在某一时刻同时操作一个共享资源,例如一个全局变量,任何一个线程都要使用初始锁互斥地访问,以避免多个线程同时访问发生错乱。 在某一时刻只有一个线程可以获得互斥锁,在释放互斥锁之前其它线程原创 2021-11-18 22:17:41 · 7964 阅读 · 4 评论 -
C++11中thread库join和detach的区别
C++11中thread库join和detach的区别线程状态在一个线程的生存期中,可以在多种状态之间转换,不同的操作系统可以实现不同的线程模型,定义许多的线程状态,且每个状态还可以包含多个子状态。但大体来说,所有的操作系统有几种状态是通用的。就绪态:参与调度,等待被执行,一旦被CPU选中,就立即开始执行。运行态:占用CPU,正在被运行。休眠态:暂不参与调度,等待特定的事件发生后转化为就绪态。中止态:已经运行完毕,等待回收线程资源。线程环境线程存在于进程之中,进程内所有的全局资源对于内部转载 2021-11-17 20:57:15 · 792 阅读 · 0 评论 -
C++11原子操作
C++11原子操作原子操作的概念 所谓原子操作,其意义就是“原子是最小的,不可分割的最小个体”。**表示当多个线程访问同一个全局资源的时候,能够确保所有其它的线程都不在同一时间访问相同的资源。**也就是它确保在同一时刻只有唯一的线程对这个资源进行访问。类似于共享资源的访问保护。但是原子操作更加接近底层,即效率更高。 在以往C++中没有原子操作的规定,更多使用的都是汇编语言或者借助第三方库,如Intel的pthread来实现。但在C++11中的特性引入原子操作的相关概念,并通过新的头文件提供了多种原原创 2021-11-17 20:54:59 · 978 阅读 · 0 评论 -
C++主线程与子线程的关系
C++主线程与子线程的关系一、主线程和子线程执行顺序 在C++中main函数是程序运行便会执行,即是主线程。在此之后创建的线程属于子线程。那么问题来了,主线程和子线程谁的优先级更高? 主线程总是能优先获得CPU资源,且主线程执行完后,程序(即进程)也就执行完了,这时子线程会被迫结束。二、如何控制执行顺序 如果想要先执行子线程,然后再执行子线程应该如何做? 使用Windows.h提供的Sleep()函数。 通俗地说,当我们调用Sleep函数时,比如Sleep(100),它会提醒系统,执原创 2021-11-17 20:52:04 · 2617 阅读 · 0 评论 -
网络编程基础知识之单线程与多线程
网络编程基础知识之单线程与多线程程序、进程、线程 程序通俗地说就是由源代码生成的可执行应用。 进程就是当一个程序开始运行时,它就是一个进程。进程包括运行中的程序和程序所使用到的内存和系统资源。即进程包括该程序以及运行该程序所需要的内存和资源(如CPU)。一个进程是由一或多个线程组成,进程只负责资源(如CPU)的调度和分配,线程才是真正执的执行单元,使用进程给予的资源进行处理操作。 线程是程序中的一个执行流,每个线程都有自己的专有寄存器(栈指针、程序计数器等),但代码区是共享的。即不同的线程可以原创 2021-11-17 20:50:10 · 649 阅读 · 0 评论 -
网络编程基础知识之线程安全
网络编程基础知识之线程安全 线程安全是多线程编程中的一个概念。在拥有共享数据的多条线程并行执行的程序中,线程安全的代码会通过同步机制保证各个线程都可以正常且正确的执行,不会出现数据污染等意外情况。线程安全性的分类方法包括不可变、线程安全、有条件线程安全等。这种分类系统的核心是调用者是否可以或者必须用外部同步包围操作。线程安全具有多线程共享变量或方法可以在多线程的环境下被安全有效地访问的意义。这说明了两方面的问题:(1)可以从多个线程中调用,无需调用方有任何操作。(2)可以同时被多个线程调用,无需县线程之原创 2021-11-16 22:40:25 · 196 阅读 · 0 评论 -
C++网络编程实例之多个客户端交互(多线程)
C++网络编程实例之多个客户端交互(多线程)效果服务端源码TIPS:服务端的功能为分发客户端消息。#define _WINSOCK_DEPRECATED_NO_WARNINGS#include <iostream>#include <thread>//C++11线程库#include <list>//Windows网络库#include <WinSock2.h>//引入socket动态库,win下可以,但不能跨平台#pragm原创 2021-11-04 19:35:28 · 1183 阅读 · 3 评论 -
C++网络编程实例(初识多线程)
C++网络编程实例(初识多线程)TIPS:以下程序使用同一台主机演示。效果展示Cpp服务端源码服务端开启多线程,等待多个客户端连接。#define _WINSOCK_DEPRECATED_NO_WARNINGS#include <iostream>#include <thread>//C++11线程库//Windows网络库#include <WinSock2.h>//引入socket动态库,win下可以,但不能跨平台#pragma c原创 2021-11-03 22:27:49 · 1862 阅读 · 5 评论 -
C++网络编程实例2(socket)
C++网络编程实例2(socket)功能完成Cpp客户端简单功能,可收发数据。Cpp服务端实例地址:原创 2021-11-02 10:01:05 · 532 阅读 · 0 评论 -
C++网络编程实例(socket)
C++网络编程实例(socket)功能实现基于sokcet的Cpp服务端TIPS:功能包括接收客户端的数据,向客户端发送数据。源码#define _WINSOCK_DEPRECATED_NO_WARNINGS#include <iostream>//#include <windows.h>#include <WinSock2.h>#pragma comment(lib,"ws2_32")using std::cout;using std::end原创 2021-11-01 11:06:46 · 1699 阅读 · 0 评论 -
C++控制台输出中文时乱码的解决方案
C++控制台输出中文时乱码的解决方案起因使用cmd程序进行编码和C++程序编码(源文件编码)不同。cmd程序默认的编码格式是gbk,而C++程序编码格式是utf-8。解决方案1、C++源代码里更改cmd编码源码实例:#include <iostream>using std::cout;using std::endl;using std::cin;int main(){ system("chcp 65001"); cout << "测试" <<原创 2021-10-31 22:27:35 · 12997 阅读 · 2 评论