这是我在VS2019上写的第一个项目,使用VS2019的目的是想在更为规范的IDE上写出更加规范的代码。
  使用内存池可以减少程序运行中产生的内存碎片,且可以提高程序内存分配效率从而提升程序效率。在这篇笔记中,我将记录下自己关于这个内存池项目的思路与详细代码。同时,在我的C++网络编程学习相关内容的下一步改进中,我将引入这个内存池提高服务端的运行效率。

阅读全文 »

  • 使用的语言为C/C++
  • 源码支持的平台为:Windows / Linux

一、思路与准备

  在之前的 C++网络编程学习:服务端多线程分离业务处理高负载 笔记中,我将业务处理相关内容从主线程中分离,大大提高了服务端的效率。随着服务端的进一步完善,我会把各个模块进行分离,从而使代码的结构更加便于修改与完善,同时也可以提高代码的运行效率。
  本篇笔记中,我会记录自己如何把消息发送的相关内容从业务处理线程中分离出来。

阅读全文 »

  • 使用的语言为C/C++
  • 源码支持的平台为:Windows / Linux
  • 东西不多,简单记录一下,今后可能会补充

零、思路与流程

select网络模型的大概流程如下:
1.获取一个至三个fd_set集合,获取一个timeval
2.select函数对fd_set集合进行选择筛选
3.FD_ISSET函数依据fd_set集合遍历查找待处理事件

阅读全文 »

  • 使用的语言为C/C++
  • 源码支持的平台为:Windows / Linux

一、思路与准备

之前的服务端思路大概是如下的:

1
2
3
4
5
6
7
8
9
10
1.建立socket
2.绑定端口IP
3.监听端口
while(true)
{
4.使用select函数获取存在待监听事件的socket
5.如果有新的连接则与新的客户端连接
6.如果有待监听事件,则对其进行处理(接受与发送)
}
7.关闭socket

  但是,这样的架构在select处理事件较多时,很容易效率低下。对于这类问题,我们可以引入生产者与消费者模式,来处理此类并发问题。

阅读全文 »

  C++11中新引入了std::chrono库,由此可以较为容易的实现一个计时器。同时,休眠操作也可以通过这个库来实现,从而使代码有良好的跨平台性,避免使用Windows/Linux的系统休眠函数。
  在接下来的网络编程学习中,将引入该计时器,实现对每秒收包、连接等数据的计数显示。
  本篇学习记录使用的语言为C++,调用的库为C++11里的std::chrono库。

阅读全文 »

  之前学过一点C语言多线程方面的内容(pthread.h),但是仅仅是会用,对多线程的实现原理什么的基本上算是不了解。接下来,我的网络编程学习要进一步对代码进行优化,其中肯定少不了对多线程的运用,所以在进行下一步之前,先系统的学习一下多线程。
  本篇学习记录使用的语言为C++,调用的线程库为C++11里的std::thread库。

阅读全文 »

  前两天在blink上发的思路,花了一天时间给实现了 。不得不说,好久没写Qt程序,手生了不少,要不应该可以更有效率的。

一、功能

主要实现以下功能:

  • 显示当前系统时间
  • 给定一个定期提醒时间间隔,显示离提醒还有多久
  • 显示程序运行以来经过的时间
  • 可最小化到托盘,实现后台运行
  • 当达到提醒时间间隔后,弹窗提醒
阅读全文 »

  • 使用的语言为C/C++
  • 源码支持的平台为:Windows / Linux

一、关于缓冲区溢出

1.缓冲区溢出的原因

  之前我们所编写的服务端与客户端的数据量都是很小的,且操作也不频繁,需要键入指令发送报文。

  我们可以尝试在之前客户端代码的循环里,不断发送一种数据包,且把数据包的大小加大到1000字节,会发现很快服务端和客户端就会出现问题——要么是数据接收出现问题,要么是服务端或者客户端程序直接卡掉。这里出现问题的原因就是socket内核缓冲区溢出。

阅读全文 »

  • 使用的语言为C/C++
  • 源码支持的平台为:Windows / Linux

一、为何要进行封装操作

  C++为面向对象编程语言,我们要以面向对象的思路进行源码的编写。
  在对主要源码进行封装后,客户端与服务端的代码编写更加清晰明了,逻辑性更强,便于开发维护。且在今后的服务端高并发测试中,便于新建多个连接进行测试。
  在本篇笔记中,我会基于笔记四的源码进行封装,并将记录我对客户端与服务端源码进行封装时的思路与步骤。最终源码为客户端封装类文件TcpClient.hpp与服务端封装类文件TcpServer.hpp,以及客户端源码client_test.cpp与服务端源码server_test.cpp

阅读全文 »
0%