网络编程实战
文章平均质量分 76
网络编程源码,一行行代码手敲实战。
程序员行者孙
计算机本硕,分享AI+编程实践玩法(天美加班中,断更一段时间),公众号:AI Sun
展开
-
Socket实现模拟TCP通信粘包问题
具体来说,TCP是一种面向连接的协议,它通过将数据划分为小的数据块(通常称为段)进行传输。发送方将这些数据块发送到网络,而接收方则负责将它们重新组装成原始的数据。然而,由于网络的不确定性和各种因素,接收方有时会在处理数据时将多个小数据块合并成一个大的数据块,从而产生粘包现象。是指在传输过程中,发送方发送的多个小数据包被接收方粘合在一起,形成一个大的数据包。这种现象通常出现在使用流式传输协议(如TCP)进行数据传输的情况下。这些方法有助于在数据传输过程中有效地处理粘包问题。在计算机网络通信中,原创 2024-01-23 10:00:00 · 57822 阅读 · 3 评论 -
Muduo类详解之Channel
同时Channel类还提供了设置该fd的感兴趣事件,以及将该fd及其感兴趣事件注册到事件监听器或从事件监听器上移除,以及保存了该fd的每种事件对应的处理函数。revents_代表事件监听器实际监听到该fd发生的事件类型集合,当事件监听器监听到一个fd发生了什么事件,通过Channel::set_revents()函数来设置revents值。持有⼀个⽂件描述符,正在监听的事件,已经发⽣的事件(由Poller 返回),以及各个事件(读、写、更新、错误)回调函数的 Function 对象。原创 2024-03-26 08:30:00 · 45954 阅读 · 0 评论 -
Muduo类详解之EventLoop
Channel 可以看作是对每个已经建⽴连接的封装(即 accept(3) 返回的⽂件描述符)对象都唯⼀绑定了⼀个线程,这个线程其实就在⼀直执⾏这个函数⾥⾯的。的可读事件 和可写事件处理函数,⼜⽐如另⼀个 Channel。的智能指针(对epoll / poll 的封装),⼀个⽤于。(⽂件描述符的封装),⽽是通过 Poller 来进⾏的。发⽣ 了可读事件,可写事件,则这个 Channel。的类定义中可以看出,除了⼀些状态量以外,每个。可以看作是对业务线程的封装,⽽。中封装的实际发⽣的事件,执⾏。原创 2024-03-25 18:34:46 · 48161 阅读 · 0 评论 -
深入浅出Reactor和Proactor模式
工作方式:Reactor模式使用一个事件循环/事件轮询器(通常是主线程),负责监听和分发IO事件。当有IO事件发生时,Reactor会调用相应的处理函数进行处理。工作方式:Proactor模式使用多线程来处理IO事件。一个线程负责发起IO操作,当操作完成后,另一个线程会收到通知并处理完成的IO操作。是两种常见的设计模式,用于处理事件驱动的并发编程。它们在处理IO操作时有着不同的工作方式和特点。原创 2024-03-19 15:17:40 · 53371 阅读 · 0 评论 -
TCP和UDP可以绑定同样的端口吗?
不过这里有种特殊情况,0.0.0.0:8080和192.168.1.1:8080,这里也是会报错“Address already in use”,因为0.0.0.0是一个特殊地址,这里省去不知道的朋友去GPT了。其实问题的本质就只用抓住一个,bind()的时候靠的是什么?(如192.168.1.1:8080和192.168.168.1.2:8090)这个是最普通的情况了,当然是可以绑定成功的。,可以说是两个完全独立的模块,因为传输层的端口号的作用,仅仅是为了区分同一台主机上的不同应用程序。原创 2024-03-19 14:59:16 · 52996 阅读 · 0 评论 -
webserver烂大街?还有必要做么?
顾名思义,Web Server 就是提供 Web 服务的 Server。比如我们访问 http://,其实就是在使用百度的 Server 提供的服务。一般来说, Web Server 对外提供的是 HTTP 服务(也可以是其他服务),这就是为什么我们的网址都以「http://」开头。超文本传输协议(Hypertext,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII形式给出;而消息内容则具有一个类似。原创 2024-03-16 20:45:21 · 56748 阅读 · 0 评论 -
Socket编程(头脑清晰,防止过载)
加上之后代码(代码量大的时候)会显得臃肿,没有逻辑,报错和codereview也不方便,所以在写的时候可以封装起来,因为bind(),aceept()都是小写的,我们可以写成大写,再将报错信息写进去,这样代码就会简洁很多。这里有个生动的例子,也是听课听到的:比如去某二楼洗脚,大厅接待的人是第一个socket,而进行后续活动的人,是大厅接待的人(第一个socket)等待客户来了之后分配的(第一个socket监听信息分配socket)。第一次写可以看着上面的图写,然后写多了其实就不用看着上面的图了。原创 2023-12-24 17:00:00 · 58277 阅读 · 1 评论 -
C\C++采用epoll实现聊天室
epoll 是一个 Linux 下用于高效 I/O 多路复用的机制,它提供了一组系统调用函数来管理事件和文件描述符。size 参数指定了内核应该为该实例预分配的文件描述符表的大小。这个参数在实际使用中通常可以设置为一个较大的值,表示能够监视的文件描述符的最大数量。这些函数共同构成了 epoll 的基本操作。通过这些函数,应用程序可以实现对大量文件描述符的高效管理和事件处理。1.epoll_create:创建 epoll 实例。创建一个新的 epoll 实例,返回一个文件描述符。下面是epoll的实现图。原创 2024-01-21 10:32:10 · 59058 阅读 · 1 评论 -
Socket实现服务器和客户端(手把手教会)
Socket 编程是一种用于在网络上进行通信的编程方法,以下代码可以实现在不同主机之间传输数据。使用 recv 函数从客户端接收数据,使用 send 函数向客户端发送数据。解决分包、粘包问题-------------使用 close 函数关闭连接的套接字。使用 close 函数关闭连接的套接字。原创 2024-01-22 15:30:00 · 38632 阅读 · 2 评论 -
解决TCP粘包问题
怎么解决粘包问题呢,其实借鉴一下tcp报文段的组成(分成TCP数据部分和TCP首部),我们也可以把发送的数据分为两个部分,一个是data,一个是data_len,这样有了data_len之后可以保证接收到完整的data数据后不再接受数据,这样就解决了粘包的问题。粘包问题已经在上一篇博客中写到具体可以看-----------保留可能存在的残余数据,并在下一次接收到数据时继续解析。根据协议格式从接收到的字节流中解析出完整的数据包。明确定义通信协议的格式,包括消息头和消息体。在每个数据包前加入消息长度信息。原创 2024-01-24 10:00:00 · 55751 阅读 · 0 评论