linux网络编程
阿翔同学
这不是通往幼儿园的车车
展开
-
线程池c++11
#include <iostream>#include <string>#include <mutex>#include <condition_variable>#include <thread>#include <queue>using namespace std;struct Task { void* ctx; void (*handle)(void* ctx);};void thread_cycle_.原创 2022-04-09 16:42:32 · 627 阅读 · 0 评论 -
心跳包&乒乓包【介绍】
心跳包&乒乓包(可以携带少量的信息)【应用层协议】心跳检测机制:主要是用来检测用户是否处于连接的状态。在TCP网络通信中客户端与服务器时常的非正常断开,所以需要检测client是否保持连接,常用的手段就是心跳机制。Heart-Beat线程就是运用守护进程https://blog.csdn.net/qq_44065088/article/details/109141683我已经讲过了 守护进程(线程)怎么编写,在接收和发送数据时个人设计一个守护进程(线程),定时发送 Heart-Bea原创 2020-10-26 13:20:26 · 950 阅读 · 1 评论 -
linux网络高级编程-libco协程事件驱动与调度
一.协程的“阻塞”与线程的“非阻塞”一个线程中的所有协程 本质上都是串行执行的,在上一篇章的代码中:https://blog.csdn.net/qq_44065088/article/details/109272505在 Producer 协程函数内我们会看到调用 poll 函数等待 1 秒,Consumer 中也会看到调用 co_cond_timedwait 函数等待生产者信号。注意,从协程的角度看,这 些等待看起来都是同步的(synchronous),阻塞的(blocking);但从底层线程的角原创 2020-10-26 07:15:19 · 222 阅读 · 0 评论 -
linux网络高级编程-协程【腾讯Libco库】
历史:协程这个概念,最近这几年可是相当地流行了。尤其 go 语言问世之后,内置的协 程特性,完全屏蔽了操作系统线程的复杂细节;甚至使 go 开发者“只知有协程,不知 有线程”了。当然 C++, Java 也不甘落后,如果你有关注过 C++ 语言的最新动态,可能 也会注意到近几年不断有人在给 C++ 标准委员会提协程的支持方案;Java 也同样有一 些试验性的解决方案在提出来。一.协程是什么?简而言之 协程是一种轻量级的线程【只有独立的栈空间】, 当然前面也提到了在 linux下 线程 也是一种.原创 2020-10-25 15:12:42 · 299 阅读 · 0 评论 -
linux网络高级编程-数据包在各层的解析
我们去网上偷了一张图我们用 原始套接字 来 验证一下 这个 图的 真伪【我知道 它是真的】#include <iostream>#include <netinet/in.h>#include <sys/socket.h>#include <netinet/ether.h>#include <unistd.h>#include <string.h>#include <string>#include原创 2020-10-25 12:22:18 · 165 阅读 · 0 评论 -
linux网络编程-水平触发/边沿触发
我直接画图介绍把#include <iostream>#include <sys/epoll.h>#include <unistd.h>using namespace std;#define MAXLINE 10#define MAX_OPEN 10#define PIPE_READ 0#define PIPE_WRITE 1intmain(int argc, char*argv[]){ pid_t pid; int i;原创 2020-10-25 11:07:58 · 201 阅读 · 0 评论 -
多路IO转接服务器-epoll【重点】
一.epoll介绍epoll是linux下多路io复用接口select/poll的增强版,它能显著提高程序在大量并发连接中少量活跃的情况下的系统CPU利用率,因为它会复用文件描述符集合来传递结果而不用迫使开发者每次等待事件之前都必须重新准备要要被监听的文件描述符集合,另一点原因就是获取事件的时候,无需遍历整个被监听的的文件描述符集合,只要遍历那些被内核IO事件异步唤醒而加入Ready队列的描述符集合就行了。【什么意思呢:比如 教作业,老师(转接模型), n多个学生(client),当少数学生作业写好了(原创 2020-10-25 10:46:46 · 119 阅读 · 0 评论 -
多路IO转接服务器-POLL
Poll(原理和select一样)【也和select一样 不用话太多的精力】相比select改进的地方1.最大文件描述符数量可以 > 10242.接受事件和处理事件分开【select是传入传出参数 描述符集合在一起的,需要自己维护一个client数组】3.但如果链接的client太多效率还是很低【也和select一样是用的轮询机制】要逐个遍历才知道 那些client有事件产生struct pollfd { int fd; ...原创 2020-10-25 09:32:41 · 124 阅读 · 0 评论 -
linux网络编程高级篇-原始套接字【简单的抓包实现】
一.原始套接字(SOCK_RAW)【比较偏向物联网方面了,但是还是介绍一下,有兴趣的可以了解一下】一种不同于 SOCK_STREAM, SOCK_DGRAM的套接字,它实现于系统核心。 可以介绍本机网卡上所有的数据帧(数据包),对于监听网络流量和分析网络数据很有作用。 开发人员可以发送自己组装的数据包【前面都介绍过相关的协议了】到网络上。 广泛应用于高级网络编程。 网络专家,黑客通常会用此来编写奇特的网络程序。流式套接字只能收发:TCP SCTP 协议的数据报式套接字只能收发: ...原创 2020-10-23 14:36:42 · 501 阅读 · 0 评论 -
多路IO转接服务器-select
有帮助记得点个赞+关注一.多路IO转接服务器多路IO转接服务器也叫做多任务IO服务器。该类服务器实现的主要思想,不在由应用程序自己监视客户端连接,取而代之的是由内核替应用程序监视文件。主要实现凡是有三种,今天来介绍一下第一种方式SELECT【轮询机制】二.SELECT【轮询机制】1.select能监听的文件描述符个数受限于FD_SETSIZE,一般为1024,【这是由历史原因造成的,因为以前网络不是这么发达并发量不高,大佬设计这个select的时候觉得1024已经够用了】。单纯..原创 2020-10-23 13:10:29 · 122 阅读 · 0 评论