![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
网络通信
文章平均质量分 52
wjfdsklfdkfksd
这个作者很懒,什么都没留下…
展开
-
Linux之epoll
epoll 提供了比 select 和 poll 更高效的事件通知机制,能够更好地处理大量的文件描述符。可以通过 epoll_ctl 动态添加或删除文件描述符,避免了 select 和 poll 中需要重新构建文件描述符集合的缺点。总之,epoll 是 Linux 下一种非常高效的 I/O 多路复用机制,适用于需要处理大量文件描述符的高并发场景。epoll_ctl:向 epoll 实例中添加或删除文件描述符,以及设置文件描述符的监听事件;支持大量的文件描述符,能够处理数万个文件描述符;原创 2023-05-18 14:49:43 · 390 阅读 · 0 评论 -
linux之pool
它可以同时监视多个文件描述符,当其中任意一个文件描述符发生读写事件时,就会通知程序进行相应的处理。与 select 不同的是,poll 函数使用一个结构体数组来存储需要监视的文件描述符,而不是使用 fd_set 集合。此外,poll 函数没有最大文件描述符数量的限制,也不会改变传入的 nfds 参数的值,因此使用起来更加方便。例如,如果要监视三个文件描述符,那么 nfds 的值应该是 4。,因为 poll 函数还需要监视一个额外的文件描述符,即用于中断 poll 函数阻塞的文件描述符。原创 2023-05-18 14:20:01 · 479 阅读 · 0 评论 -
select
select 模型是一种多路复用 I/O 模型,它可以同时监视多个文件描述符,等待其中任意一个文件描述符上有事件发生,从而实现 I/O 多路复用。如果内核等待相应的文件描述符发生异常,则将失败的文件描述符设置进exceptfds中,如果不关心错误事件,可以传值NULL。当文件描述符集合中的任意一个文件描述符上有事件发生时,select 函数返回,并将有事件发生的文件描述符集合返回给进程。获取信息,其中,内核需要从readfds和writefds知道哪些文件描述符需要等待,应用进程需要从。原创 2023-05-18 13:44:59 · 197 阅读 · 0 评论 -
TCP报文分包和粘包
发送方发送字符串“helloworld”,接收方却接收到两个字符串"hello"和"world"原创 2023-05-15 11:33:01 · 165 阅读 · 0 评论 -
socket各个结构体及其参数
TCP建立连接要三次握手,建立过程中,服务端会收到两次消息,分别对应连接的半连接状态和全连接状态。服务器收到客户端的一次握手信息,放入半连接队列,收到两次握手信息放入全连接队列。accept函数是从全连接队列中取出已经建立的连接的。linux内核会为listen状态的socket维护两个队列:不完全连接请求队列(SYN_RECV状态)和等待accept建立socket的队列(ESTABLISHED状态)小于1024的端口号通常被通用的知名端口占用了,例如http的端口是80.下面这段代码可以替换为。原创 2023-05-15 10:01:17 · 395 阅读 · 0 评论 -
HTTP与HTTPS协议
HTTP是应用层协议, 是一个基于TCP/IP通信协议来传递数据(HTML文件、图片文件、查询结果等);HTTP协议客户端通过URL向HTTP服务端发送所有请求。HTTP默认端口号为80。无连接明文传输不安全。原创 2023-05-05 18:55:58 · 53 阅读 · 0 评论 -
网络字节序和主机字节序
内存中存储字节有两种方法:一种是低序字节存储在起始地址,此为小端字节序;一种是将高序字节存储在起始地址,此为大端字节序;原创 2023-04-29 16:14:03 · 87 阅读 · 0 评论 -
TCP报文结构以及三次握手以及四次握手
客户端收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给服务器端,服务器端检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,客户端和服务器端进入ESTABLISHED状态,完成三次握手,随后客户端与服务器端之间可以开始传输数据了。:Server端收到了Client端发送的FIN报文段,向Client端返回一个标志位是ACK的报文段,ack设为seq加1,Server端告诉Client端,我确认并同意你的关闭请求。原创 2023-04-29 14:54:25 · 770 阅读 · 0 评论 -
TCP的粘包和拆包
由于数据太小,每次小数据量发送,会占用网络资源,及时很小的包发送,如果应用层很忙,没有来得及及时取出,TCP Recv Buffer中可能会有msg2和msg3,这样还是会粘包。相比之下,UDP协议不会维护发送和接收缓冲区,也没有流量控制机制,因此数据包的传输完全取决于网络的状态,若数据包较大,经过网络传输时可能会被分为多个数据包,但UDP协议并不保证接收端收到这些数据包的顺序,也没有重传机制,因此可能会导致数据包的丢失或者乱序,这是UDP协议的缺陷之一。UDP有数据边界,TCP是没有数据边界,是流协议。原创 2023-04-29 13:19:52 · 1979 阅读 · 0 评论 -
socket通信之select
poll和epoll只能在linux环境下适用。window平台多线程实现客户端收发数据分离。多线程版本的的socket的server端。select模型 代码。原创 2023-04-28 21:59:54 · 190 阅读 · 0 评论 -
网络编程之简单socket通信
与 UNIX/Linux 不同的是,Windows 会区分 socket 和文件,Windows 就把 socket 当做一个网络连接来对待,因此需要调用专门针对 socket 而设计的数据传输函数,针对普通文件的输入输出函数就无效了。UNIX/Linux 程序在执行任何形式的 I/O 操作时,都是在读取或者写入一个文件描述符。一个文件描述符只是一个和打开的文件相关联的整数,它的背后可能是一个硬盘上的普通文件、FIFO、管道、终端、键盘、显示器,Socket,又叫套接字,是在应用层和传输层的一个抽象层。原创 2023-04-28 20:20:20 · 1304 阅读 · 0 评论 -
网络通信之应用层协议
OSI七层参考模型OSI参考模型TCP/IPGET / /原创 2023-04-28 09:26:03 · 36 阅读 · 0 评论