网络编程
文章平均质量分 61
sp_13230409636
这个作者很懒,什么都没留下…
展开
-
246-Linux libevent
1.句柄(Handle)在Windows下是句柄,在Linux下就是文件描述符2.事件多路分发器(EventDemultiplexer)通过IO函数实现的,就是IO函数3.事件处理器和具体事件处理器就是回调函数4.编译的时候要加上-levent5.当程序运行时,摁Ctrl+C就会触发一个信号,就会调用信号的回调函数,就会打印出^Csig=2,程序无法通过Ctrl+C退出,可以通过Ctrl+\来退出信号和时间如果都是永久性事件EV_PERSIST,那么Ctrl+C就一直不终止程序而且每隔5秒原创 2022-03-11 18:05:26 · 209 阅读 · 0 评论 -
245-Linux I/O复用函数的使用
1.selectI/O 复用使得程序能同时监听多个文件描述符,这对于提高程序的性能至关重要。通常,网络程序在下列情况下需要使用 I/O 复用技术:①TCP 服务器同时要处理监听套接字和连接套接字②服务器要同时处理 TCP 请求和 UDP 请求③程序要同时处理多个套接字④客户端程序要同时处理用户输入和网络连接⑤服务器要同时监听多个端口需要指出的是,I/O 复用虽然能同时监听多个文件描述符,但它本身是阻塞的。并且当多个文件描述符同时就绪时,如果不采取额外的措施,程序就只能按顺序依处理其中的每一个文原创 2022-03-11 09:14:23 · 104 阅读 · 0 评论 -
244-Linux epoll
1.epoll和poll相比有什么区别?答案:epoll是Linux平台特有的,select和poll在Linux和Windows平台中都有,epoll的出现是为了解决客户端数量越来越多(描述符多)的场景poll每次循环都需要把收集描述符的数组从用户空间拷贝到用户空间中,当数组大小非常大时,就会浪费资源,而epoll从头到尾只需要拷贝一次select和poll只是知道n个描述符里面有m个描述符有请求,但是不知道具体是哪一个,它只能通过遍历的方式一个一个比对,当随着客户端数量急剧增长的时候,所需要的时间原创 2022-03-10 18:38:56 · 861 阅读 · 0 评论 -
243-Linux poll
1.Linux系统三种IO复用的方法:select、poll、epoll2.epoll是Linux系统特有的3.poll就像是一个加强版的select,有更多的事件类型,可以检测更多的描述符,它们并没有本质上的变化4.运行结果图5.服务器端代码#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <sys/select.h>#include <string.h原创 2022-03-10 17:56:45 · 105 阅读 · 0 评论 -
242-Linux IO复用方法select
1.为什么要有IO复用方法?之前实现tcp服务器的并发是通过多线程或者多进程来实现的,它每增加一个客户端,就会创建一个进程或者线程去处理客户端的请求,当客户端的数量达到成千上万的时候,不可能通过创建成千上万的进程或者线程去处理客户端的请求,它的效率是非常低的,所以有了IO复用方法,来更好的解决上述问题2.IO复用方法可以在单个线程或者单个进程内就可以做到同时处理成千上万个客户端的请求3.当从键盘上输入数据的时候,就会立即打印出输入的数据,如果5秒内没有检测有数据的输入,就会打印出time out4原创 2022-03-10 11:12:05 · 686 阅读 · 0 评论 -
240-Linux HTTP代码实现
1.http协议是应用层协议,默认端口是80,在传输层使用的是tcp协议2.http报文每一行后面都有一个\r\n3.直接运行是不行的,我们需要用管理员身份去运行,只有管理员才能使用1024以内的端口原创 2022-03-09 18:41:28 · 269 阅读 · 0 评论 -
239-Linux TCP协议和UDP协议
1.TCP 协议提供的是:面向连接、可靠的、字节流服务。使用 TCP 协议通信的双方必须先建立连接,然后才能开始数据的读写。双方都必须为该连接分配必要的内核资源,以管理连接的状态和连接上数据的传输。TCP 连接是全双工的,双方的数据可以通过一个连接进行读写。完成数据交换之后,通信双方都必须断开连接以释放系统资源。使用 tcpdump 可以抓包观察 TCP 连接的建立与关闭。该命令需要管理员权限,格式如下(假设两个测试用的主机 IP 地址为 192.168.43.214 和 192.168.43.160 )原创 2022-03-09 12:02:05 · 2376 阅读 · 0 评论 -
238-Linux HTTP协议和Web服务器
1.浏览器与服务器的通信过程浏览器与 web 服务器在应用层通信使用的是 HTTP 协议(超文本传输协议),而 HTTP 协议在传输层使用的是 TCP 协议。那么浏览器需要和 web 服务器三次握手建立连接后,才可以发送 HTTP 请求报文,服务器收到请求报文后,向浏览器回复 HTTP 应答报文。浏览器向服务器发起连接前,需要得到服务器的 IP 及端口。用户在浏览器中通常只输入网址(网站域名),浏览器会通过 DNS 服务查询获取到服务器的 IP 地址。 对于端口来讲,使用 HTTP 协议的程序一般默认使用原创 2022-03-09 11:10:33 · 2268 阅读 · 0 评论 -
237-http和https的区别
1.HTTP与HTTPS的区别①安全性上,HTTPS是安全超文本协议,在HTTP基础上有更强的安全性。简单来说,HTTPS是使用TLS/SSL加密的HTTP协议②申请证书上,HTTPS需要使用ca申请证书③传输协议上,HTTP是超文本传输协议,明文传输;HTTPS是具有安全性的 SSL 加密传输协议④连接方式与端口上,http的连接简单,是无状态的,端口是 80; https 在 http 的基础上使用了ssl协议进行加密传输,端口是 4432.HTTP的工作过程HTTP由请求和响应构成,是一个原创 2022-03-09 10:59:02 · 147 阅读 · 0 评论 -
236-Linux http协议
1.http协议是应用层协议2.使用的端口是知名端口:803.http协议在传输层使用的是tcp协议4.https默认的端口号是4435.http和https的区别?6.http请求方法7.http报文的应答状态码8.当在浏览器中输入www.baidu.com后都发生了什么?答案:计算机不能直接使用域名去找服务器,找服务器只能通过ip地址,所以会通过DNS域名系统来找www.baidu.com对应的服务器的ip地址,DNS是一级一级往上找的,先从低级别的开始找,每上升一个级别,需要搜索的也就原创 2022-03-08 21:56:23 · 487 阅读 · 0 评论 -
235-Linux udp协议
1.tcp和upd的特点tcp特点:面向连接、可靠、流式服务udp特点:无连接、不可靠、数据报服务2.先运行服务器再启动客户端后,重启服务器,客户端再给服务器发送消息,请问,服务器能收到消息吗?答案:udp是无连接的,udp的客户端和服务器端是不建立连接的(严格来说udp没有客户端和服务器端),udp的客户端可以直接给服务器发送数据,发送成功就成功了,发送不成功就不成功,没有应答确认、超时重传等机制,应答确认、超时重传等机制是tcp特有的,以此来保证可靠性,但是udp是没有的,相比之下,udp的效率原创 2022-03-08 21:13:12 · 2007 阅读 · 0 评论 -
234-Linux tcp多线程、进程并发
1.tcp特点:面向连接的可靠的流式服务2.建立连接是通过三次握手完成的,是在客户端connect时开始进行三次握手,关闭连接是通过四次挥手完成的,客户端close的时候开始进行四次挥手3.可靠性的体现:①应答确认②超时重传③乱序重排④去重⑤滑动窗口来进行流量控制4.流式服务send将数据发送到客户端的发送缓冲区中,由tcp报文段发送到服务器的接收缓冲区中,服务器通过recv接收服务器端接收缓冲区的数据,这就是流式服务注意:send()成功只能说明数据成功的到达了客户端的发送缓冲区,不能原创 2022-03-08 13:33:18 · 1190 阅读 · 0 评论 -
233-Linux tcp通信
1.客户端connect开始执行三次握手,客户端close开始执行四次挥手2.tcp的服务器端和客户端是面试的时候最有可能考的,必须要会3.什么情况下会导致服务器端bind绑定的时候失败?答案:端口被占用或者ip地址错误4.服务器端listen函数中的第二个参数在Linux系统中指的是已完成三次握手的队列的长度,在Unix系统中指的是未完成三次握手队列和已完成三次握手队列大小之和5.服务器端recv的返回值等于0是唯一可以判断客户端关闭了连接的一个依据,不管是客户端close了还是说客户端的进程原创 2022-03-07 11:41:00 · 470 阅读 · 0 评论 -
232-Linux tcp通信
1.传输层:两台不同主机上的两个进程的通信2.tcp/ip 应用层 传输层 网络层 数据链路层应用层发送一个"hello",到传输层以后会变成 tcp “hello”,当到了网络层以后会变成 ip tcp “hello”,到数据链路层以后会变成 帧头 ip tcp “hello” 帧尾3.tcp和udp的特点tcp特点:面向连接的、可靠的流式服务upd特点:无连接的、不可靠的数据报服务tcp的可靠性是有开销的,tcp为了可靠性付出了一些的代价4.通过套接字可以进行数据的收发5.创建套接原创 2022-03-07 10:38:09 · 477 阅读 · 0 评论 -
231-Linux网络编程TCP
1.主机字节序列和网络字节序列主机字节序列分为大端字节序和小端字节序,不同的主机采用的字节序列可能不同。大端字节序是指一个整数的高位字节存储在内存的低地址处,低位字节存储在内存的高地址处。小端字节序则是指整数的高位字节存储在内存的高地址处,而低位字节则存储在内存的低地址处。在两台使用不同字节序的主机之间传递数据时,可能会出现冲突。所以,在将数据发送到网络时规定整形数据使用大端字节序,所以也把大端字节序成为网络字节序列。对方接收到数据后,可以根据自己的字节序进行转换Linux 系统提供如下 4 个函数来完原创 2022-03-05 22:12:15 · 583 阅读 · 0 评论 -
230-Linux线程回顾+网络基础概念
1.什么是进程?进程就是一个正在运行的程序2.什么是线程?线程就是进程内部的一条执行路径或者执行序列3.线程从操作系统的角度来看分为三种:用户级线程、内核级线程、组合模型Linux平台线程是一个内核级线程Linux上线程的实现:用户、内核、组合用户级线程:由用户管理和创建,创建开销小,可以创建很多用户级线程,但是无法利用多个处理器的资源用户级线程,内核并不能感知到线程的存在,是我们用户空间线程库中的代码来进行线程的创建、管理、销毁、切换,简单来说就是内核认为我只有一条执行路径,用户空间自己把他原创 2022-03-05 16:46:09 · 777 阅读 · 0 评论 -
108-网络编程——第七章原始套接字编程(下)
13.由于原始套接字提供管理下层传输的能力,它们可能会被恶意利用,这是一个安全问题,因此只有具有管理员权限的用户才能创建原始套接字,否则在bind()函数调用时会失败,错误码为WSAEACCES,这么左可以防止普通用户向网络发出恶意构造的IP数据包14.通常来说,对于某一给定的地址族,系统为特定的套接字只支持一种协议,如果对于某一给定的地址组的特定套接字支持不止一种类型协议,那么需要在协议字段明确指明协议类型15.原始套接字能够操控的协议类型有很多,协议字段此时通常不为0,而是由一个协议类型的宏定义具体原创 2021-11-26 11:30:48 · 388 阅读 · 0 评论 -
105-网络编程——第七章原始套接字编程(上)
1.原始套接字是允许访问底层传输协议的一种套接字类型,提供了普通套接字所不具备的功能,能够对网络数据包进行某种程度的控制操作因此原始套接字通常用于开发简单网络性能监视程序以及网络探测、网络攻击2.从用户的角度看,在TCP/IP协议簇中,流式套接字和数据报套接字这两类套接字分别对应于传输层的TCP和UDP协议,几乎所有的应用数据传输都可以用这两类套接字实现3.Barkeley套接字将流式套接字和数据报套接字定义为标准套接字,用于在主机之间通过TCP和UDP来传输数据4.为了保证Internet的使用效原创 2021-11-23 11:52:44 · 1822 阅读 · 0 评论 -
100-网络编程——第五章流式套接字
一:TCP协议的传输特点1.TCP协议是一个面向连接的传输层协议,提供高可靠性字节流传输服务,主要用于一次传输要交换大量报文的情形为了维护传输的可靠性,TCP增加了许多开销,如:确认、流量控制、计时器以及连接管理等2.TCP协议的传输特点是:①端到端通信:TCP提供给应用面向连接的接口。TCP连接是端到端的,客户应用程序在一端,服务器在另一端②建立可靠连接:TCP要求客户在应用程序在于服务器交换数据前,先要连接服务器,保证连接可靠建立,建立连接测试了网络的连通性,如果有故障发生,阻碍分组到达远端系原创 2021-11-21 22:29:48 · 2876 阅读 · 0 评论 -
98-网络编程——第四章协议软件接口(下)
25.Windows套接字是Windows环境下的网络编程接口26.Windows Sockets一般由两部分组成:开发组件和运行组件27.开发组件是供程序员开发Windows Sockets应用程序使用的,它包括介绍Windows Sockets实现的文档,Windows Sockets应用程序接口(API)引入库和一些头文件28.头文件winsock.h、winsock2.h对应于WinSock 1和Winsock 2,是Windows Sockets最重要的头文件,他们包括了Windows So原创 2021-11-20 23:45:45 · 686 阅读 · 0 评论 -
97-网络编程——第四章协议软件接口(上)
1.协议软件接口承担应用程序与操作系统协议实现之间的桥梁作用,Windows Sockets是一种广泛使用的协议软件接口2.从操作系统层面来看,系统内核集成了对TCP/IP的具体实现,具有常用协议应用能力,协议实现在内核空间执行3.从用用程序层面来看,各类涉及网络通信的应用程序都通过系统中的协议实现完成数据交互过程,应用程序在用户空间执行4.协议软件接口承担应用程序与操作系统协议之间的桥梁作用,它封装了协议实现的基本功能,开放系统调用接口以简化操作,使得应用程序可以用系统调用的方式方便的使用协议实现提原创 2021-11-20 23:45:11 · 866 阅读 · 1 评论 -
93.网络编程——第二章.网络程序通信模型(下)
八:客户/服务器模型(C/S)的优缺点1.优点:①结构简单②支持分布式、并发环境③ 服务器集中管理资源,有利于权限控制和系统安全④可扩展性较好2.缺点:①缺乏有效的安全性②客户负荷过重③服务器工作效率低九:浏览器/服务模型(Browser/Sever,BS)1.B/S模型是随着Internet技术的兴起,对C/S模型的一种变化或者改进2.在B/S模型中,用户界面完全通过WWW浏览器实现,一部分事务逻辑在前端(浏览器)实现,但是主要事务逻辑在服务器端实现,通常以三层架构部署实施,主要包原创 2021-11-19 12:38:50 · 1051 阅读 · 0 评论 -
92.网络编程——第二章.网络程序通信模型(上)
一:通信双方的角色1.客户(Client),请求的主动方,向服务器发出服务请求,接收服务器发挥的应答2.服务器(Sever),请求的被动方,开放服务,等待请求,收到请求后,提供服务,做出响应3.用户(User),使用计算机的人二:客户与服务器的数量关系1.多个客户进程同时访问一个服务器进程(n:1)2.一个客户进程同时访问多个服务器提供的服务(1:n)三:客户与服务器的位置关系1.客户和服务器运行在同一台机器上2.客户和服务器运行在同一个局域网内的不同机器上3.客户和服务器运行于广域网不原创 2021-11-19 12:38:41 · 947 阅读 · 0 评论 -
91.网络编程——第一章:网络应用程序设计基础
1.应用层是网络应用程序及其应用层协议存留的层次。TCP/IP协议簇的应用层协议包括Finger(用户信息协议)、文件传输协议(File Transfer Protocol,FTP)、超文本传输协议(Hypertext Transfer Protocol,HTTP)、Telent(远程终端协议)、简单邮件传输协议(Simple Mail Transfer Protocol,SMTP)、因特网中继聊天(Internet Relay Chat,IRC)、网络新闻传输协议(Network News Transfe原创 2021-11-18 23:58:22 · 1227 阅读 · 0 评论 -
89-网络编程IPv4地址结构(socketaddr_in)
结构体 sockaddr_in头文件:#include < netinet/in.h >结构体定义:参数说明:sin_family指代协议族,AF_INET(地址族)PF_INET(协议族),在socket编程中只能是AF_INETsin_port端口号,在linux下端口号的范围065535,其中01024范围的端口号已经被系统使用或保留。必须要采用网络数据格式,普通数字可以用htons()函数转换成网络数据格式的数字sin_addr存储IP地址,使用in_addr这个数据结构:原创 2021-11-16 23:12:54 · 362 阅读 · 0 评论 -
88-网络编程接收函数(recvfrom)
函数原型:int recvfrom(socket s,void *buf,int len,unsigned int flags, struct sockaddr *from,int *fromlen);函数说明:接收一个数据报并保存源地址。参数说明:s:标识一个已连接套接口的描述字。buf:接收数据缓冲区。len:缓冲区长度。flags:调用操作方式,一般设置为0。from:(可选)指针,用来指定欲接收数据的网络地址。fromlen:(可选)指针,指向from长度值。返回值:成功则返回接原创 2021-11-16 23:07:59 · 6918 阅读 · 0 评论 -
87-网络编程接收函数(recv)
函数原型:int recv(socket s, char FAR* buf, int len, int flags);函数说明:recv()用来接收指定的socket传来的数据,并把数据传到由参数buf指向的内存空间参数说明:socket:一个标识已连接套接口的描述字。已连接套接字的描述符,通过套接字指向的套接字结构所标识的端点地址,TCP协议实现会将发送给本地端点地址的数据提交到该套接字的接收缓冲区中buf:用于接收数据的缓冲区。指向要保存接收数据的应用程序缓冲区len:缓冲区长度。接收缓冲区的原创 2021-11-16 11:53:33 · 999 阅读 · 0 评论 -
86-网络编程发送函数(send)
函数原型:int send( socket s, const char FAR* buf, int len, int flags);函数说明:向一个已连接的套接口发送数据。参数说明:s:一个用于标识已连接套接口的描述字。已连接套接字的描述符,数据的发送将会通过它参考其指向的套接字结构,获得数据通信的对方地址,然后把数据发送出去buf:包含待发送数据的缓冲区。指向要发送的字节序列len:缓冲区中数据的长度。发送的字节数flags:调用执行方式。提供了一种改变套接字调用默认行为的方式,把flags设原创 2021-11-16 11:47:54 · 1067 阅读 · 0 评论 -
85-网络编程发送函数(sendto)
函数原型:头文件:#include < sys/types.h >头文件:#include < sys/socket.h >int sendto ( socket s , const void * msg, int len, unsigned int flags, const struct sockaddr * addr , int tolen ) ;函数说明:sendto() 用来将数据由指定的socket传给对方主机。参数说明:s:已建好连接的socket,如果利用原创 2021-11-16 11:43:44 · 6259 阅读 · 0 评论 -
84-网络编程连接函数(connect)
函数原型: int connect(int s, const struct sockaddr * name, int namelen);头文件#include <sys/socket.h>参数说明:s:标识一个未连接socket。由函数socket()创建的描述符name:指向要连接套接字的sockaddr结构体的指针。被声明为一个指向sockaddr结构的指针,对于TCP/IP应用程序,该指针通常先被转换为以sockaddr_in或sockaddr_in6结构保存的服务器的IP地址和端原创 2021-11-16 11:36:50 · 692 阅读 · 0 评论 -
83-网络编程接收连接函数(accept)
函数原型:int accept( int fd, struct socketaddr* addr, socklen_t* len);参数说明:fd:套接字描述符。已绑定并设置为“监听”状态的套接字,称它为监听套接字,该套接字只是负责监听连接请求,实际上不会用于发送和接收数据addr:返回连接着的地址。被声明为一个指向sockaddr结构的指针,当accept()函数成功返回后,将连接对等方的端点地址写入addr指针指向的结构中返回len:接收返回地址的缓冲区长度。指明地址结构的长度返回值:成功返回原创 2021-11-16 11:25:59 · 1448 阅读 · 0 评论