![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux服务器实例代码
For Nine
这个作者很懒,什么都没留下…
展开
-
一个服务器压力测试程序
这是一个服务器压力测试程序,它本身运行在客户端,能模拟大量用户同时访问一台服务器。#include<stdlib.h>#include<stdio.h>#include<assert.h>#include<unistd.h>#include<sys/types.h>#include<sys/epoll.h>#include<fcntl.h>#include<sys/socket.h>#inclu原创 2022-05-17 12:24:26 · 232 阅读 · 0 评论 -
Linux服务器实例程序———使用定时器列表处理非活动连接
1、程序特点这个服务器程序每隔5秒就收到一个SIGALRM信号,我们给该信号注册的处理函数是向一个管道的输入端写入信号的编号,而主函数中会使用epoll监听该管道读端的可读事件,发现是SIGALRM信号后,会触发对定时器链表的检查,程序会检查该链表上每个 socket 连接的定时器,检查是否超时,如果超时,说明这个客户端不会活动了,断开其连接,如果未超时,不做任何动作。整体看逻辑还是很简单的,但是有很多细节的地方要注意。定时器链表的建立,注册信号处理函数等。2、代码timer_lst.h头文件no原创 2022-04-29 21:49:00 · 824 阅读 · 0 评论 -
使用SIGURG信号接受带外数据
这是一个服务器程序,使用SIGURG信号接受带外数据。#include<sys/socket.h>#include<sys/types.h>#include<arpa/inet.h>#include<netinet/in.h>#include<assert.h>#include<unistd.h>#include<signal.h>#include<stdio.h>#include<err原创 2022-04-26 13:47:39 · 211 阅读 · 0 评论 -
使用统一事件源的方式同时处理信号和 I/O
下面是一个服务器程序,他使用统一事件源的方式同时处理I/O和信号。#include<sys/types.h>#include<sys/socket.h>#include<unistd.h>#include<stdio.h>#include<stdlib.h>#include<assert.h>#include<netinet/in.h>#include<arpa/inet.h>#include&原创 2022-04-25 14:09:08 · 112 阅读 · 0 评论 -
I/O复用的高级应用:聊天室程序———实例代码
1概述这是一个聊天室程序,分为服务端和客户端两部分。多个客户端可以连接到同一个服务器,当一个客户端向服务器发送消息时,该消息会被转发给除发送端外的其他客户端,其他客户端收到该消息并输出到标准输出。2客户端程序客户端有两个功能:从标准输入终端读入用户输入数据,并将其发送至服务器往标准输出终端打印服务器发送给他的数据/* 这是一个聊天室程序的客户端程序 */#define _GUN_SOURCE 1#include<sys/types.h>#include<sys/soc原创 2022-04-23 15:16:34 · 578 阅读 · 1 评论 -
I/O复用的高级应用:同时处理 TCP 和 UDP 服务
1、I/O复用的另一用武之地:同时处理 TCP 和 UDP 服务同一端口(或socket地址)既能接收UDP请求也能接收TCP请求。我们使用同一个socket地址创建两个 socket 文件描述符,分别用于处理该端口上的UDP和TCP请求。然后使用I/O复用技术同时监听这两个socket 文件描述符的事件,就可以实现同时处理一个端口上的 TCP 和 UDP 请求。2、实例程序下面是一个服务器程序,他能同时处理 TCP 和 UDP 服务。...原创 2022-04-23 14:19:09 · 1749 阅读 · 0 评论 -
I/O复用的高级应用之一:非阻塞 connect———使用 select 实现(也可以用 poll 实现)
一啥是 非阻塞 connect?我们之前唯一使用过的非阻塞socket文件描述符是在服务器中,使用非阻塞的方式可以大大提升服务器程序的效率。现在试想,我们把客户端程序的 socket 设置为非阻塞的,那么用该 socket 文件描述符进行 connect 连接就很容易报错。为什么呢?因为,非阻塞下,对该文件描述符 socket 连接...原创 2022-04-23 13:38:10 · 630 阅读 · 0 评论 -
select 同时接收普通数据 和 带外数据
这是一个服务器程序,使用select同时接收普通数据(监视可读) 和 带外数据(监视异常)。#include<sys/socket.h>#include<sys/types.h>#include<unistd.h>#include<netinet/in.h>#include<arpa/inet.h>#include<assert.h>#include<stdio.h>#include<errno.h&g原创 2022-04-23 12:36:34 · 370 阅读 · 0 评论 -
epoll 的EPOLLONESHOT 事件———实例程序
本实例程序是一个服务器,他接收用户数据,并输出到标准输出,他的特点是:对于每一个EPOLLIN事件,都唤醒一个线程去处理他,而主进程继续往下执行,也就是进入下一轮循环,调用epoll_wait监听其他事件。#include<sys/socket.h>#include<sys/types.h>#include<netinet/in.h>#include<arpa/inet.h>#include<unistd.h>#include<a原创 2022-04-23 10:00:50 · 601 阅读 · 0 评论 -
epoll 的 ET,LT工作模式———实例程序
下面是一个服务器程序,可通过LT 或 ET两种模式接收客户端发来的数据,并打印到标准输出。#include<sys/types.h>#include<sys/socket.h>#include<unistd.h>#include<assert.h>#include<stdio.h>#include<string.h>#include<stdlib.h>#include<netinet/in.h>原创 2022-04-23 08:12:46 · 231 阅读 · 0 评论