自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 客户端发送消息后muduo是怎么运行的

这篇文章承接于我的上两篇文章: muduo核心组件分析_小猪快快跑的博客-优快云博客 有客户端连接后muduo是怎么运行的_小猪快快跑的博客-优快云博客 如果有不正确的地方,欢迎朋友们指正。 用 telnet 命令给服务器发送消息。 下面的颜色代表子线程。 下面是main.cc: // main.cc class EchoServer { public: EchoServer(muduo::net::EventLoop* loop, const mud.

2022-04-13 22:49:25 401

原创 有客户端连接后muduo是怎么运行的

这篇文章承接于我的上一篇文章:muduo核心组件分析_小猪快快跑的博客-优快云博客 如果有不正确的地方,欢迎朋友们指正。 用 telnet 命令连接服务器。 在没有连接进来的时候,主线程阻塞在下面的函数(epoll_wait可以设置超时时间,这样就不阻塞了): // EPollPoller.cc Timestamp EPollPoller::poll(int timeoutMs, ChannelList* activeChannels) { int numEvents = ::epoll

2022-04-13 17:04:15 420

原创 muduo核心组件分析

muduo的设计真的很巧妙。不少人说这个网络库的源码剖析起来比较容易,但是我感觉里面调用来调用去还是比较复杂的。 根据打印的日志分析了muduo库的流程。如果有不对的地方,欢迎朋友们指正。 以 echo 为例,下面把 maic.cc, echo.h, echo.cc 整在一起了,就整在 main.cc 里。子线程设置3个。主要关注各个文件里的函数是怎样跳转的。 class EchoServer { public: EchoServer(muduo::net::EventLoop* loop,

2022-04-13 09:42:33 1237

原创 STL用迭代器删除元素

序列式容器vector,deque 使用erase删除迭代器后,后面的元素的迭代器会失效。但是erase会返回下一个有效的迭代器。 int main() { vector<int> v{ 1,2,3,4 }; vector<int>::iterator it = find(v.begin(), v.end(), 1); auto it1 = v.erase(it); cout << *it1 << endl; } 上面代码输出2. 关联式容器

2022-05-16 21:10:16 716

原创 C++智能指针学习

不使用智能指针 在不使用智能指针的情况下,如果 new 出来了一个指针,那么必须在程序里手动 delete 一下。但是如果在 delete 之前程序就 return 了,那么就会导致资源泄露。直到程序退出,操作系统才会释放这段内存。但是如果程序一直没有退出,这段内存就会一直没有释放。 危害,如下: #include <iostream> using namespace std; int main() { int* ptr = new int(0); if (...) {

2022-04-05 17:53:00 1086

原创 TCP的短链接和长连接

在写网络编程项目的客户端的时候,出现了这样的疑问。在什么时候连接上服务器呢?这时候的连接在我的认知里很自然的就和TCP长连接画等号。 先说一下客户端的任务,在和服务器端建立通信之后完成注册、登录、注销业务。登录之后可以进行更细的业务。 但是如果客户端和服务器端连上了,之后客户端却迟迟没有动手干正事,正事就是上面说的更细的业务。那这样的话岂不是在浪费服务器端的资源。 这时候了解了TCP短连接。在我的认识里,TCP短连接和长连接的区别主要是三次握手和四次挥手之间的那段时间可以互发多少信息。短连接的话在客户

2022-03-28 11:07:39 3449

原创 详细验证MYSQL里的隔离级别

首先在会话里查看一下默认的隔离级别:

2022-03-20 20:12:01 506

原创 C++实现几种排序算法

快速排序 //双指针一左一右开始 class Solution { public: void fastsort(vector<int>& nums, int start, int end) { if (start >= end) return; int left = start; int right = end; int index = rand() % (end - start + 1) + start;

2022-03-14 17:19:37 2042

原创 Linux下将MYSQL结合到C++代码中

安装MYSQL 首先,要先安装MYSQL: sudo apt-get install mysql-server mysql-client 默认的端口是3306,可以检查一下: netstat -ntulp | grep 3306 试一下能不能进入MYSQL: mysql -u root -p123456 这时候有一个问题,可能安装了MYSQL,但是登不进去。这是因为安装的时候没有出现让我们自己设置账号密码的环节。解决办法: sudo cat /etc/mysql/debian.c

2022-03-13 21:08:54 2937

原创 高级调度、中级调度、低级调度的区别

目录 高级调度 中级调度 低级调度 总结 如果有不正确的话,欢迎指正。下面是个人理解。 高级调度 将作业调入内存,强调的是第一次。将作业调出内存,强调的是最后一次。 等待区——外存 座位——内存 筷子,一双——CPU,一个 等待区的人——作业 管理员——操作系统 现在在等待区有一个人很饿很饿,想要坐到座位上吃饭。 管理员看他快坚持不住了,让他进去,并且询问了他的名字。相当于作业第一次进入内存。记下名字相当于在内存里有了 PCB。这个行为就是高级调度。 中级调

2022-03-05 20:08:33 5391 5

原创 《TCP IP网络编程》阅读笔记及部分《图解 TCPIP》《图解 HTTP》补充笔记

目录 第一章:理解网络编程和套接字 接受连接请求的套接字(接电话) socket bind listen accept 总结 一个服务器端简单代码 发送连接请求的套接字(打电话) connect 一个客户端简单代码 运行上面的服务器和客户端程序 基于 Linux 的文件操作 文件描述符 打开文件(open) 关闭文件(close) 将数据写入文件(write) 读取文件中的数据(read) 文件描述符与套接字的区别 第二章:套接字类型与协议设置 创建套接字 s

2022-03-05 15:33:12 571

原创 对KMP算法的理解

下面是模式串 t,上面是目标串 s。蓝色的模式串代表匹配上了,红色代表没有匹配上。 前面都一样,直到 s[5]!=t[5]. 那么暴力解法是: 可以看到又从 s[1] 开始重新匹配了,虽然一开始就匹配不上,又要让 s[2] 和 t[0] 开始匹配。 但是通过观察可以这样匹配: 不需要让 s[1] 和 t[0] 匹配。直接将模式串 t 的第一个字符搬到 s[3] 处。 理由如下: 先看这个图,也就是本文第一张图: 蓝色是匹配上的部分,那么 s[0:4] 就等于 t[0...

2022-02-28 10:50:46 271

原创 C++TCP通信和广播实验开多个客户端的问题

在学习的过程中遇到了下面的问题,其实很简单,怪自己看的不够仔细。 在做广播通信实验的时候,运行服务器端代码和客户端代码,正常通信。如果再打开一个客户端,后打开的客户端无法与服务器连接。出现以下提示: 提示端口被占用。 而在做 TCP 通信实验的时候,可以开多个客户端进行通信。 原因在于广播实验的客户端需要用 bind 函数绑定端口号,有如下代码: struct sockaddr_in addr; addr.sin_family = AF_INET; addr.sin_

2022-02-26 21:21:56 2433

空空如也

空空如也

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

TA关注的人

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