![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
网络编程
听说西佳佳难得很
要学的有好多……
是自己的功课,在这里没有必要欺骗自己,要好好弄懂在记录的知识点。感受到孤单的时候也要向前,努力成为最完善,最有力,最强大的自己。
展开
-
回顾:HTTP/HTTPS/对称加密/非对称加密/session/cookie/token
HTTP超文本传输协议通过浏览器和服务器进行数据交互,进行超文本(文字、图片、视频等)传输的规定,规定了超文本传输要遵守的规则特点:1,HTTP协议是无状态的,每次HTTP请求都是独立的,任何两个请求之间没有必然的联系,当然实际应用种并不完全如此,HTTP引入了Cookie和Session机制来关联请求2,多次HTTP请求,在客户端请求网页时多数情况下并不是一次请求就能成功,服务端首先是响应HTML页面,然后浏览器收到响应后发现HTML页面还引用其他的资源,例如CSS、JS文件,图片等,还会自动发送原创 2020-09-27 09:24:26 · 773 阅读 · 4 评论 -
回顾:网络编程(待排版,知识点看情况补充
一, CS模型:(整个流程)服务器启动后,首先创建一个(或多个)监听socket, 并调用bind函数将其绑定到服务器感兴趣的端口上,然后调用listen函数等待客户连接。服务器稳定运行之后,客户端就可以调用connect函数向服务器发起连接由于客户连接请求时随机到达的异步事件,服务器需要使用某种I/O模型来监听这一事件, 比如I/O复用技术之一的select系统调用。当监听到连接请求后,服务器就调用accept函数接受它,并分配一个逻辑单元为新的连接服务。逻辑单元可以是新创建的子进程、子进程或者其他。原创 2020-09-04 20:38:16 · 324 阅读 · 0 评论 -
select、poll、epoll详解(看不太懂的那种)❓及比较
IO复用服务端编程模型是,客户端发来的请求,服务端会产生一个进程来对其进行服务,每当来一个客户请求就产生一个进程来服务, 然而进程不可能无限制产生,因此为了解决大量客户端访问的问题,就引入了IO复用技术即一个进程可以同时对多个客户请求进行服务因此, IO复用的“介质”是进程,复用一个进程来对多个IO进行服务,虽然客户端发来的IO是并发的,但是IO所需要的,虽然客户端发来的IO是并发的,但是IO所需的读写数据多数情况下是没有准备好的,因此可以利用一个函数(select\poll)来监听IO所需的这些数据原创 2020-07-12 22:41:21 · 365 阅读 · 0 评论 -
项目1-模仿vsftp的ftp服务器实现的详细README版本
实现ftp小项目的详细思路整理看github上是很就的小项目了,但还是花了蛮久的才都理清楚,如果还有人想做这个项目并且觉得有不理解的地方,欢迎留言,一定会认真思考解答的,也算是检验自己原创 2020-07-06 10:58:42 · 192 阅读 · 0 评论 -
⚠⚠项目时遇到的新函数新问题小记xX
管道:一种进程间通信的方式管道是半双工的,数据只能向一个方向流动;需要双方通信时,需要建立两个管道;只能用于具有共同祖先的进程之间进行通信。通常,一个管道由一个进程创建,然后改进程调用fork,此后父子进程之间就可以应用该管道下午开始看百度网盘里的C++知识点复习(第一季)、stl源码(第二季)、winsocket多线程(第三季)、miniftpd、大并发服务器开发、...原创 2020-05-26 23:12:20 · 388 阅读 · 0 评论 -
网络编程17——本地套接字通信⭐
本地套接字和网络套接字区别本地套接字通信服务器????#include<stdio.h>#include<unistd.h>#include<string.h>#include<ctype.h>#include<arpa/inet.h>#include<sys/types.h>#include<sys/socket.h>#include<sys/un.h>#include<stdde原创 2020-05-12 16:52:10 · 283 阅读 · 0 评论 -
网络编程16——UDP实现的并发服务器和客户端
TCP、UDP通信的各自优缺点TCP: 面向连接的, 可靠,数据报传输。对于不稳定的网络层,采取完全弥补的通信方式,即丢包重传优点:稳定,数据流量稳定、速度稳定、顺序稳定缺点:传输速度慢,速率低,开销大使用场景:数据的完整性要求较高,不追求效率,如大数据传输,文件传输UDP:无连接的,不可靠的,数据报传输,对于不稳定的网络层,采取完全不弥补的通信方式。默认还原网络状况优点:传输速度快,速率高,开销小缺点:不稳定,数据流量、速度、顺序都不稳定使用场景:对时效性要求较高,对稳定性其次,如游戏、视原创 2020-05-12 11:00:57 · 522 阅读 · 0 评论 -
网络编程15——线程池(1)认识及其各部分模块代码分析⭐⭐⭐认识基础篇(要再重新看看
一、main框架1,先创建线程池2,往队列中添加任务,线程池阻塞在任务上,往线程池中添加任务(往线程池中的线程分配任务),借助回调处理任务3,等子线程完成任务,最后销毁线程池int main(void){//threadpool_t *threadpool_create(int min_thr_num, int max_thr_num, int queue_max_size); threadpool_t *thp = threadpool_create(3, 100, 100);//创建...原创 2020-05-11 18:32:45 · 229 阅读 · 0 评论 -
网络编程14——epoll反应堆模型⭐,epoll反应堆实现源码(并没掌握▼
epoll ET模式+非阻塞 + void *ptrepoll反应堆模式与原来监听模式对比:给lfd和cfd指定回调函数的区别epoll反应堆实现源码(这代码有点难==eventset函数设置回调函数:lfd---->acceptconn()cdf—>recvdata()cfd---->senddata()eventadd函数:将一个fd添加到监听红黑树,设置监听read事件还是监听事件网络编程中:read ---- recv() ; write ---- sen原创 2020-05-10 18:43:59 · 227 阅读 · 0 评论 -
网络编程13——epoll事件模型:ET和LT模、掌握实现epoll的ET模式(非阻塞模式
epoll是linux下多路复用IO select/poll 的增强版本,它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。因为它会复用文件描述符集合来传递结果为不用迫使开发者每次等待事件之前都必须重新准备要被侦听的文件描述符集合,另一个原因就是获取事件的时候,它无需遍历整个被侦听的描述符集,只需要遍历那些被内核IO事件异步唤醒而加入Ready队列的描述符集合就行了目前epoll是linux大规模并发网络程序中的首选模型epoll除了提供 select/poll 那种IO事件的电平原创 2020-05-09 12:39:35 · 356 阅读 · 0 评论 -
网络编程12——epoll实现多路转接思想及实现⭐
epoll实现多路IO转接思路 lfd = socket(); bind(); listen(); //开始epoll监听 int epfd = epoll_create(1024); //监听红黑树的树根 struct epoll_event tep, ep[1024]; // tep用来设置单个fd属性,ep是epoll_wait()传出的满足监听事件的数组 tep. events = EPOLLIN; //初始化lfd的监听属性,每个加到树上的fd都要初始化监听属原创 2020-05-08 23:39:58 · 177 阅读 · 0 评论 -
网络编程11——epoll实现多路IO的三个基本函数:epoll_create、epoll_ctl、epoll_wait
要用epoll实现多路IO转接需要用的epoll_create()、epoll_ctl()、epoll_wait()三个函数一、epoll_create(int size):创建一棵监听红黑树本质是一棵平衡二叉树(红黑树)参数size:创建红黑树的监听节点数量(但这个数仅供内核参考返回值:成功指向新创建的红黑树的根节点fd;失败返回-1和errno二、epoll_ctrl:操作监听红黑树参数1:epfd是epoll_create的函数返回值,就是图中的那个根节点参数2:op 对该监听红黑原创 2020-05-08 23:02:23 · 1828 阅读 · 0 评论 -
网络编程10——poll的多路IO转接 | 用poll函数实现服务器 | 拓展监听上限方法
poll函数原型fds:监听的文件描述符数组nfds:监听数组的实际有效监听个数timeout:超时时长,单位是milliseconds毫秒,传入-1阻塞等待;传入0立即返回不阻塞进程;传入>0为等待指定毫秒数,如过当前系统时间精度不够毫秒,向上取值返回值: 返回满足对应监听事件的文件描述符总个数fd:所要监听的文件描述符events:所要监听的文件描述符的事件(读事件POL...原创 2020-05-08 17:26:20 · 338 阅读 · 0 评论 -
网络编程9——实现select多路IO转接❀、⭐在原始select中添加自定义数组提高效率的实现
思路 lfd = socket(); //创建套接字 bind(); //绑定地址结构 listen(); //设置监听上限 ———— fd_set rset; //创建读(r)监听集合 fd_set allset;//区分读监听集合和后添加进去的总的监听集合 FD_ZERO(&allset); //将r监听集合清空 FD_SET(lfd, ...原创 2020-05-08 11:00:13 · 229 阅读 · 0 评论 -
网络编程8——多路IO转接服务器设计思路、开始学习select(参数简单认识
多路IO转接(响应式)原理梗概:借助内核,select来监听,客户端连接、数据通信事件select函数简介select能监听的文件描述符个数受限于FD_SETSIZE,一般为1024,单纯改变进程打开的文件描述符个数并不能改变select监听文件个数解决1024一下客户端时使用select是很合适的,但如果链接客户过多,select采用的是轮询模式,会大大降低服务器相应效率。????原型...原创 2020-05-07 22:53:35 · 219 阅读 · 0 评论 -
网络编程7——TCP状态、端口复用、shutdown函数
TCP各个状态看TCP状态netstat -apn |grep 端口号端口复用在server的TCP连接没有完全断开之前不允许重新监听是不合理的。因为TCP连接没有完全断开指的是cfd没有完全断开,而我们重新监听的是lfd,虽然占用的是同一个端口,但IP地址不同,cfd对应的是某个客户端通讯的一个具体的IP地址,而lfd对应的是wildcard address。解决这个问题的方法是使...原创 2020-05-07 22:03:20 · 410 阅读 · 0 评论 -
网络编程6——多线程并发服务器实现(线程分离
recall一下代码实现(还是要先封装wrap.h)1,socket2,bind,绑定端口,注意参数,定义初始化强转化3,listen函数,限定同时访问数4,loop中,accept等待连接,注意参数,第三个参数长度的类型是socklen_t#include<stdio.h>#include<string.h>#include<arpa/inet....原创 2020-05-07 17:54:56 · 300 阅读 · 0 评论 -
网络编程5——多进程并发服务器分析与实现/ 多线程并发服务器分析(实现在下篇)
使用多进程并发服务器要考虑一下几点:1,父进程最大文件描述符个数(父进程中需要关闭(close)accept返回的新文件描述符2,系统内创建进程个数(与内存大小相关)3,进程创建过多是否降低整体服务性能(进程调度)一、多进程并发服务器思路分析1,socket()不调用系统的socket()函数了,去调用自己封装的Socket()函数 dao1,Socket() :创建监听套接字lf...原创 2020-04-26 14:41:16 · 420 阅读 · 0 评论 -
网络编程4——错误处理函数的封装和readn,readline封装思想说明
系统调用不能保证每次都成功,必须进行出错处理,这样一方面可以保证程序逻辑正常,另一方面可以迅速得到故障信息== 为使错误处理的代码不影响主程序的可读性,我们把与socket相关的一些系统函数加上错误处理代码包装成新的函数,叫做一个模块wrap.c ==头文件为了方便跳到page页,将自己封装的函数写出与系统函数名字一样(大小写不一样)相当于将之前写的代码都挨个封装成函数????举例socket...原创 2020-04-25 23:40:08 · 237 阅读 · 0 评论 -
网络编程3——网络层复习(三次握手、四次握手、滑动窗口)
bkg:一、分层模型结构OSI七层模型:物、数、网、传、会、表、应TCP/IP 4层末次那个:网(链路层/网络接口层)、网、传、应应用层:http、ftp、nfs、ssh、telnet……传输层:TCP、UDP网络层:IP、ICMP、IGMP链路层:以太网帧协议、ARP二、C/S和B/S区别C/S:缓存大量数据、协议选择灵活、速度快,但是不安全、跨平台、开发工作量较大B/S:安...原创 2020-04-25 16:39:43 · 220 阅读 · 0 评论 -
网络编程2——CS模型的TCP通信流程总结 及 server、client的实现
一、socket模型创建流程图二、server的实现1,报错文件先写好,基本头文件写好,C的、网络的2,创建socket,定义文件描述符lfd,记得要返回值检查3,创建bind函数,其中第二个参数是服务器端地址结构,要定义及初始化并在传参时要强制转换4,创建listen函数,传入文件描述符和允许同时接入的个数5,创建accept函数,第二个参数是传入的已连接的客户端地址结构,因此也要...原创 2020-04-25 16:29:17 · 974 阅读 · 0 评论 -
网络编程1——套接字、网络字节序、大端小端字节序、socketaddr、listen、bind、accept、connect等预备概念
一、套接字概念 Socket在TCP/IP协议中,“IP地址+TCP或UDP端口号”唯一标识网络通讯中的一个进程。“IP地址+TCP/UDP端口号”就对应一个Socket。欲建立连接的两个进程各自有一个socket来标识。那么这两个Socket组成的Socket pair就唯一标识一个连接。因此可以用Socket来描述两个网络连接的一对一关系。在网络通信中,套接字一定是成对出现的,一端的发送...原创 2020-04-25 09:43:12 · 475 阅读 · 0 评论