- 博客(115)
- 收藏
- 关注
原创 【项目】C++实现在线五子棋对抗
在线五子棋对抗实现五子棋服务器,能够让用户通过浏览器访问服务器,进行用户的注册,登录,对战匹配,实时对战,实时聊天等功能。Linux-ubuntu20.04,vim/vscode/g++/gdb/makefile数据管理模块:基于Mysql数据库进行用户数据的管理前端界面模块:基于JS实现前端页面(注册,登录,游戏大厅,游戏房间)的动态控制以及与服务器的通信。业务处理模块:搭建服务器与客户端进行通信,接收请求并进行业务处理。提供用户通过浏览器进行用户注册,登录,以及实时匹配,对战,聊天等功能。网络通信模块:
2025-08-15 13:50:41
108
原创 IO多路转接之Reactor
epoll的工作模式有两种,一种默认LT工作模式,另一种是ET模式。关于epoll的LT工作模式我们已经写过了。接下来我们写一份基于ET模式下的Reator,处理所有的IO。Reactor = 如何正确的处理IO+协议定制+业务逻辑处理下面我们写一个Reactor,它是一个半同步半异步IO,Reactor是在Liunx网络中,最常用,最频繁的一种网络IO设计模式!
2025-08-15 07:46:12
604
原创 IO多路转接之epoll
无论select还是poll都只有一个接口,就叫做select和poll,而epoll要正常工作起来要三个系统调用。但无论epoll有多少系统调用,epoll核心工作只有一个,就是想办法我们进行等!IO = 等 + 数据拷贝,epoll只负责等!如果我们要使用epoll,第一步我们要首先调用epoll_create,它参数就一个size在linux版本2.6.8后就可以忽略了,不过一般要大于0。调用成功会返回一个文件描述符,调用失败错误被返回,错误码被设置那epoll_create到底是干什么的呢?现在
2025-08-15 07:45:48
349
原创 IO多路转接之poll
随着等待的文件描述符变多,poll要线性遍历的方式检测所有文件描述符,这势必会带来效率的降低。因为它的类型是short而没有用操作系统自己封装的各种各样的结构体,所以对于事件的设计,我们自己用户检测事件有没有设置或者就绪一定要由我们自己来做,按位与,按位或这样的操作。select是一个具体的数据类型fd_set,既然是一个具体的类型那就直接决定了数据类型大小只能由你的编译环境自己定,今天不一样了,因为这个数组由我们自己说的算!poll的优点就不用过多介绍,输入输出分离,而且没有select上限的问题。
2025-08-15 07:45:23
365
原创 IO多路转接之select
nfds:因为select可以一次等待多个文件描述符,而每一个文件描述符它的本质是数组下标,所以多个文件描述符它的数字大小肯定不一样,同时多个文件描述符也是不同整数构成的,它一定有最大一定有最小,而其中第一次参数表示,select要监视的多个fd中值最大的fd+1如当前监视的是3、4、5、6,那个这个nfd就是6+1。除了第一个参数,剩下的四个参数有一个共同特点,全都是输入输出型参数,也就是说未来是由我们传给select,传过去之后OS也要对传入的值做修改,然后输出给我们。timeout。
2025-08-14 10:41:41
597
原创 五种IO模型
在之前我们都知道的input,output不就是IO吗,站在冯诺依曼体系角度我们知道从外设把数据搬到内存这不就是Input吗,把数据从内存拷贝到外设中这不就是output吗。这不就是传说中的IO吗。没错,但是这种理解还不够深刻!当我们在网络中发送数据的时候是使用write发生,read读取。当我们在进行write写入的时候曾经说过,我们在应用层调用write本质并不是把数据发送到网络中,其实只是把数据从应用层拷贝到传输层的发送缓冲区,所有write本质就是拷贝。
2025-08-14 10:41:24
912
原创 NAT技术、代理服务器+网络通信各层协议
数据链路层数据链路层的作用: 两个设备(同一种数据链路节点)之间进行传递数据以太网是一种技术标准;既包含了数据链路层的内容, 也包含了一些物理层的内容. 例如: 规定了网络拓扑结构, 访问控制方式, 传输速率等;以太网帧格式理解mac地址理解arp协议理解MTU网络层网络层的作用: 在复杂的网络环境中确定一个合适的路径.理解IP地址, 理解IP地址和MAC地址的区别.理解IP协议格式.了解网段划分方法。
2025-08-13 11:00:14
368
原创 数据链路层
刚开始的时候,主机A要把数据交给路由器A,那主机A可能不知道路由器A的MAC地址,只知道路由器A的IP地址,所以当主机A想转发一个数据包时,主机A也工作在网络层,也有自己的目的网络和子网掩码,从上面交过来的报文也有自己的目的IP,所以在主机A在自己的路由表查的时候并不认识这个目的IP是谁,但是根据目的IP和子网掩码按位与,对比和自己直连的局域网发现两个目标网络不相等,立马判断我要发送的目的主机和我不再同一个局域网,所以虽然我不知道你在哪,但我知道谁知道,路由器知道。
2025-08-13 10:59:52
487
原创 TCP协议
人家只是在tcp这里设立了建立连接三次握手断开连接四次挥手,但可没说一定成功,但是能保证只要把三次握手四次挥手走完就保证算你连接建立成功和断开连接成功。其次。
2025-08-12 21:50:52
1109
原创 HTTPS协议
加密就是把明文(要传输的信息) 进行一系列变换,,生成密文。解密就是把密文再进行一系列变换,,还原成明文。在这个加密和解密的过程中,,往往需要一个或者多个中间的数据,,辅助进行这个过程,这样的数据称为密钥。下面举个简单例子理解一下。c等于什么呢?这里我们都知道,0 ^ a = a,b ^ b = 0,并且 ^ 是支持交换率的a ^ b ^ c == a ^ c ^ b == c ^ b ^ a。
2025-08-11 09:24:16
934
原创 HTTP协议
响应头虽然我们说, 应用层协议是我们程序猿自己定的. 但实际上, 已经有大佬们定义了一些现成的,又非常好用的应用层协议, 供我们直接参考使用. HTTP(超文本传输协议)就是其中之一。在互联网世界中,HTTP(HyperText Transfer Protocol,超文本传输协议)是一个至关重要的协议。它定义了客户端(如浏览器)与服务器之间如何通信,以交换或传输超文本(如HTML文档)。HTTP协议是客户端与服务器之间通信的基础。
2025-07-28 15:54:36
1123
原创 Linux守护进程
断开链接为什么叫四次挥手呢?可以这样理解。男女朋友在一起最后结婚了一起生活了10年,但最终被现实打败了,男生说:我们离婚把。女生说:好啊。然后过了3秒,女生说:你跟我离婚,我也要跟你离婚。男生说:好。这种叫做协商。建立链接是一方主动,所以我们需要三次握手建立链接。断开链接是双方的事情,就必须争得双方的同意。你跟我断开链接,我也要和你断开链接,这叫做协商少了任何一方都只能叫通知。
2025-07-28 15:52:18
714
原创 应用层自定义协议【序列化+反序列化】
x = x;_y = y;int _y;char _oper;public:// 有效载荷长度\r\n有效载荷内容\r\n/*** 返回值说明:* 0:表示没有内容* -1:表示错误字符。
2025-07-23 16:18:55
888
原创 socket编程(TCP)
每一个都是对应一个文件描述符对外提供服务的, 未来我们一旦建立好连接,服务器不能用创建好的文件描述符和客户端通信,就好比不能用张三给客人提供服务,而应该让accept的返回值文件描述符来给用户提供服务。这里可以看到客户端关了服务端立马读到了,客户端在连这个文件又变成4了,这说明客户端一关闭服务端就将刚刚的文件描述符关了,关了之后你在连接我给你的还是4,此时文件描述符就被重复使用了。获取新连接之后创建子进程,创建子进程,父进程的文件描述符会被子进程继承的,文件描述符所指的文件也都是一样的。
2025-07-23 16:17:44
640
原创 socket编程(UDP)
认识端口号socket编程接口UDP网络程序查看已经运行的服务服务器读取数据Client客户端根据UDP客户端服务端实现简单的英译汉的网络字典server.ccclient.cc实现ChatServer聊天室Route.hpp(路由)windows客户端与linux服务端交汇windows客户端。
2025-07-21 17:25:54
930
原创 基于责任链模式实现消息队列
消息队列提供了一个从一个进程向另外一个进程发送有类型块数据的方法每个数据块都被认为是有⼀个类型,接收者进程接收的数据块可以有不同的类型值消息队列也有管道一样的不足,就是每个消息的最大长度是有上限的(MSGMAX)每个消息队列的总的字节数也是有上限的(MSGMNB),系统上消息队列的总数也有上限(MSGMNI)的消息队列的生命周期是随内核的消息队列支持全双工通信。
2025-07-16 10:52:20
891
原创 20. C++使用HashTable同时出封装unordered_map和unordered_set
20. C++使用HashTable同时出封装unordered_map和unordered_set
2025-05-07 12:44:29
435
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人