文章分类 -  LINUX SOCKET编程系列

SOCKET(五)多路复用
摘要:上文我们采用了IO阻塞+多线程解决了服务器多并发问题,但是,为每一个用户服务都需要开启一个线程,开销仍然是巨大的,那么有没有一种方法,能使一个线程处理多个客户呢?这就需要用到我们的多路复用机制了。 多路复用机制实现一般有select、poll、epoll三种。 对于它们的原理可以概述为将客户端连接的 阅读全文
posted @ 2023-04-30 23:13 Aspirants 阅读(219) 评论(0) 推荐(0)
SOCKET(四)用户多并发:阻塞+线程
摘要:前面的服务端只能在同一时间内处理一个客户端请求,而另外发起连接的客户端则会阻塞在accept队列中,等待正在服务的客户端退出直到轮到自己。这种仅能一对一处理的服务器在效率上是绝不可允许的,因此我们需要使得服务器能同时实现对多个用户的服务处理。 本文介绍第一种方法:阻塞IO+多线程并发(进程开销过大, 阅读全文
posted @ 2023-04-30 16:45 Aspirants 阅读(136) 评论(0) 推荐(0)
SOCKET(三)阻塞式与非阻塞式
摘要:如果你运行过(一)中的范例,你会发现,客户端与服务端未建立连接前会在accpet与connect之间等待,建立后进行读写时,不论是客户端还是服务端都会在read()处等待另一方发送。本节让我们来了解以下他们的阻塞等待原理。 阻塞机制 connnect() 客户端通过connect()主动向服务端建立 阅读全文
posted @ 2023-04-23 09:59 Aspirants 阅读(372) 评论(0) 推荐(0)
SOCKET(二)关于轮子之间的交互
摘要:listen 与 connect 三次握手 上文我们聊到通过listen函数实现服务器的监听客户连接功能,下面让我们探究一下listen是如何与connect交互实现TCP三次握手的。 如图:当客户端启动connect时,会发送一个SYN包同时进入SYN_SENT状态,LISTEN接受到包后会返回一 阅读全文
posted @ 2023-04-20 00:03 Aspirants 阅读(55) 评论(0) 推荐(0)
SOCKET(一)基本轮子详解与入门
摘要:1.图解客户端与服务端交互流程 上图轮子详解 socket简单实践 服务端 #include <stdio.h> #include <string.h> #include <arpa/inet.h> #include <sys/types.h> #include <sys/socket.h> #in 阅读全文
posted @ 2023-04-19 23:26 Aspirants 阅读(158) 评论(0) 推荐(0)