多路复用 循环服务器模型

服务器模型 在网络程序里面通常都是一个服务器处理多个客户机。为了处理多个客户机的请求服务器端的程序有不同的处理方式。 阅读详情
#include "header.h"
typedef struct sockaddr SA;
#define MAXLINE 1024

int main(void)
{
	int listen_fd,connect_fd;
	struct sockaddr_in server_addr,client_addr;
	socklen_t length;
	char buf[MAXLINE];
	fd_set rdfs;

	if((listen_fd = socket(AF_INET,SOCK_STREAM,0)) == -1)
	{
		perror("socket fail");
		exit(-1);
	}

	memset(&server_addr,0,sizeof(server_addr));
	server_addr.sin_family = AF_INET;
	server_addr.sin_port = htons(8000);
	server_addr.sin_addr.s_addr = inet_addr("127.0.0.1");

	if(bind(listen_fd,(SA *)&server_addr,sizeof(server_addr)) == -1)
	{
		perror("bind fail");
		exit(-1);
	}

	if(listen(listen_fd,10) == -1)
	{
		perror("listen fail");
		exit(-1);
	}

	int i;
	memset(buf,'\0',sizeof(buf));
	
	while(1)
	{
		
		FD_ZERO(&rdfs); //设置监听读写文件的描述符集合,仅在第一次调用select时有效
		FD_SET(STDIN_FILENO,&rdfs);
		FD_SET(listen_fd,&rdfs);		
		printf("select before\n");

		if(select(listen_fd+1,&rdfs,NULL,NULL,NULL) < 0)  //轮询
		{
			perror("select fail");
			exit(-1);
		}

		printf("select after\n");

		for(i = 0; i <= listen_fd;i++)
		{
			if(FD_ISSET(i,&rdfs))
			{
				if(i == STDIN_FILENO)
				{
					fgets(buf,sizeof(buf),stdin);
					printf("receive from stdin %s",buf);
				}
				if(i == listen_fd)
				{
					length = sizeof(client_addr);
					if((connect_fd = accept(listen_fd
						,(SA *)&client_addr
						,&length)) == -1)
					{
						perror("accept fail");
					}
					printf("connect from client IP %s"
						,inet_ntoa(client_addr.sin_addr));
					printf("client port %d\n",ntohs(client_addr.sin_port));
					memset(buf,'\0',sizeof(buf));
					read(connect_fd,buf,sizeof(buf));
					printf("read from client:%s\n",buf);
				}
			}
		}

		close(connect_fd);
	}
	close(listen_fd);
}


C语言:统计文本文件单词数、段落数。 题目描述:打开一个英文文本文件,假设文本文件单词之间全部用“空格”隔开,文本各段之间用“回车符”分开,统计输出文本的段数量,总单词数量,以及文本段的最长、最短、平均单词数量。 test.txt 文本内容:随便百度的内容 C语言代码: #include <stdio.h> #include <stdlib.h> #include <string.h> ... 阅读详情

相关推荐

Linux 系统应用编程——网络编程(服务器模型)

在网络通信过程中,服务端通常需要处理多个客户端。由于多个客户端的请求可能会同时到来,服务器端可采用不同的方法来处理。总体上来说,服务器端可采用两种模型来实现:循环服务器模型和并发服务器模型。         循环服务器模型是指服务器端依次处理每个客户端,直到当前客户端的所有请求处理完毕,再处理下一个客户端。这类模型的优点是简单,缺点显而易见。特别是TCP循环服务器模型,由于必须先处理完当前客户端

知秋一叶 2387

怎么用c语言实现读取一个txt文件里的数据 要按行读出来

打开文件 fopen("需要打开的路径") 然后使用fgets函数读取行 #include  #include  #include  #define MAX_LINE 1024 int main() {  char buf[MAX_LINE];  /*缓冲区*/  FILE *fp;            /*文件指针*/  int len;             /*行字符个数*/

饮一盏岁月流香 6万+

采用TCP网络编程实现客户服务器一对多的交流

利用TCP网络编程,实现一对多的信息交流

程序与进程

#include <unistd.h> #include <stdio.h> #include <stdlib.h> #include <sys/wait.h> #define MAXLINE 1024int main() { char buf[MAXLINE]; pid_t pid; int status; int status;

angel的博客 293

DDR4协议规范之(一)DDR4结构和寻址

DDR4 SDRAM结构和寻址DDR4 SDRAM的封装和寻址新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 DDR4 SDRAM的封装和寻址 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习

YJFeiii的博客 3万+

Linux-VMware安装后没有虚拟网卡VMnet1和VMnet8(亲测有效,一步一步跟着绝对成功)

VMware-安装后没有虚拟网卡VMnet1和VMnet8 就这个破东西我昨天弄了一天,网上什么VMware卸载重装,用CCleaner清理注册表什么的操作我全用了,但是昨天就是弄不好,同样的操作我昨天试了无数遍一直觉得可能是 持续更新中… 文章参考学习地址:https://blog.youkuaiyun.com/qq_42445139/article/details/87872130 ...

杨的博客 8845

并发服务器和循环服务器

服务器模型 在网络程序里面,一般来说都是许多客户对应一个服务器,为了处理客户的请求, 对服务端的程序就提出了特殊的要求。目前最常用的服务器模型有: • 循环服务器:服务器在同一个时刻只可以响应一个客户端的请求 • 并发服务器:服务器在同一个时刻可以响应多个客户端的请求 UDP循环服务器 UDP循环服务器的实现方法:UDP服务器每次从套接字上读取一个客户端的请求->处理

bv1315008634的博客 4384

信贷审批中的那些坑:从零开始搭建风控策略体系的5个关键步骤

本文深入探讨了信贷审批中的风控策略体系搭建,从数据陷阱识别、规则冲突诊断到反欺诈攻防,提供了5个关键步骤的实战指南。重点解析了如何通过特征工程、决策树优化和模型可解释性技术,构建动态平衡的风控体系,有效降低逾期风险并提升审批效率。

weixin_29253711的博客 411

IO多路复用、服务器模型

通过epoll_ctl将文件描述符交给内核监管,一旦fd就绪,内核就会采用callback的回调机制来激活该fd,epoll_wait便可以收到通知(内核空间到用户空间的拷贝。内核空间负责轮询监视结构体数组内的文件描述符,将发生事件的文件描述符拷贝到用户空间,再次调用poll,如此循环。内核空间负责轮询监视表内的文件描述符,将发生事件的文件描述符拷贝到用户空间,再次调用select,如此循环。poll不需要构造文件描述符表(也不需要清空表),采用结构体数组,每次也需要从用户空间拷贝到内核空间。

2301_77143270的博客 1125

联想ThinkServer SR588 重装raid5阵列信息(装完centos7后,找不到硬盘)

这里写自定义目录标题找不到硬盘选择光盘启动 找不到硬盘 装完centos7之后,提示重启,重启之后,就一直无法启动。 进入bios 看了,确实是有设置硬盘为第一启动选项。 选择光盘启动 本地标准硬盘也是找不到。 1、 重启进入bios在系统手设置里找到存储信息, 然后找到如图选项回车进入。 选择主目录进入。 进入Configuration Management 里面 先清除原来的设置信息 选择已启用在yes 提示清除成功。 返回上一目录选择,选择 Create Virtual Drive 再选择S

熠铭心时空的博客 2万+

Flink 运维监控与指标采集实战(Prometheus + Grafana 全流程)

Flink运维监控在实时计算场景中至关重要,因为Flink作业需要7×24小时稳定运行,对性能、资源、故障感知和状态变化的实时监控是保障系统稳定的关键。Flink自带的Metrics系统提供了基本的监控能力,但为了更全面的监控,Prometheus+Grafana成为最主流的解决方案。通过配置PrometheusReporter和Grafana仪表盘,可以实现对Flink作业的全面监控,包括CPU、内存、吞吐量、Checkpoint状态、KafkaSink性能等关键指标。此外,自定义指标采集和报警机制的配置

晴天彩虹雨的博客 1368

linux客户端服务端模型,Linux操作系统网络服务器模型分享

所谓并发服务器就是在同一个时刻可以处理来自多个客户端的请求;循环服务器是指服务器在同一时刻只可以响应一个客户端的请求。而且对于TCP和UDP套接字,这两种服务器的实现方式也有不同的特点。1、TCP循环服务器:  首先TCP服务器接受一个客户端的连接请求,处理连接请求,在完成这个客户端的所有请求后断开连接,然后再接受下一个客户端的请求。创建TCP循环服务器的算法如下:复制代码代码如下:socket(...

weixin_33392336的博客 162

ESP32网络开发实例-开发环境搭建

NodeMCU-ESP-32S开发环境搭建 NodeMCU-32S 最强的ESP32 开发板非盗版或副厂的CH340。WiFi 蓝牙ESP-32 可用Arduino IDE ESP32-S 是一款通用型WiFi-BT-BLE MCU模组,功能强大,用途广泛,可以用于低功耗传感器网络和要求极高的任务,例如语音编码、音频流和MP3解码等。 此款模组的核心是ESP32芯片,具有可扩展、自适应的特点。两个CPU核可以被单独控制或上电。时钟频率的调节范围为80 MHz到240 MHz。用户可以切断CPU的电源,利用低

视觉与物联智能 3781

网编(服务器)

(根据poll函数第一个参数来定,如果监听的事件为1个,则结构体数组元素个数为1,如果想监听100个,那么这个结构体数组的元素个数就为100,由程序员自己来决定)异步I/O,Epoll当有事件产生被唤醒之后,文件描述符主动调用callback(回调函数)函数直接拿到唤醒的文件描述符,不需要轮询,效率高。机制,将新连接的客户端描述符增加到描述符表中,只需要一个线程即可处理所有的客户端连接,在嵌入式开发中应用广泛,不过代码写起来稍显繁琐。监听的最大的文件描述符没有个数限制(理论上,取决与你自己的系统)

luoqing418的博客 873

AUTOSAR进阶图解==>AUTOSAR_SWS_BSWGeneral

本文详细解析AUTOSAR基础软件(BSW)模块的通用规范,涵盖其分层架构、配置管理、初始化流程和状态转换机制。AUTOSAR采用清晰的分层设计,包括应用层、服务层、ECU抽象层和微控制器抽象层,各层模块通过标准化接口交互。BSW模块配置采用类型化定义,支持预初始化、初始化和后期构建配置。文档还阐述了模块初始化流程中的依赖管理,以及运行时的状态转换与错误处理机制,为汽车电子控制单元的标准化开发提供规范指导。

一名留德华的,康德的信徒的,专注于汽车电子领域的博客 1125

【AUTOSAR-IpduM】-2.2-创建并配置一个接收RX的(Multiplexed-I-PDU)多路复用

案列背景: 在CFG中配置一个发送TX的(Multiplexed-I-PDU)多路复用Frame。 目录 1 在Arxml中创建一个发送的多路复用Frame 2 CFG导入带多路复用Frame的ARXML 2.1 CFG中提示的错误Error 2.2 如何解决CFG中提示的错误Error 3 结尾 <--返回「Autosar_BSW高阶配置」总目录--> <--返回「Autosar_BSW高阶配置」专栏主页--> <--返回「个人博客」首页--&g..

「汽车电子助手」的博客 1569

Linux:C/Socket多路复用select(转)

作一个tcp的服务程序,同时可能有大量的客户端连上来,希望分别记住各个socket 谁有数据过来,就读出来,放到一个请求队列--这些事情用一个线程完成 另外有一个结果队列,如果结果里包含了socket的编号,用一个线程专门: 取出来按编号找回原来发送者socket,发回给原来的客户端 还有一个就是处理线程(池),它取出请求队列里的一个请求,进行处理, 把处理结果放入结果队列 不知道有没

LKMIRACLE的专栏 644

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

TCP、UDP服务器模型

在网络程序里面,通常都是一个服务器处理多个客户机,为了出个多个客户机的请求,服务器端的程序有不同的处理方式。 目前最常用的服务器模型: 循环服务器:循环服务器在同一时刻只能响应一个客户端的请求。 并发服务器:并发服务器在同一时刻可以响应多个客户端的请求。 循环服务器模型: TCP socket(…); bind(…); listen(); while(1) ...

azqsnegi868990的博客 184

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

《Linux C/C++服务器开发实践》之第7章 服务器模型设计

网络I/O模型分为异步I/O(asynchronous I/O)和同步I/O(synchronous I/O),同步I/O包括阻塞I/O(blocking I/O)、非阻塞I/O(non-blocking I/O)、多路复用I/O(multiplexing I/O)和信号驱动式I/O(signal-driven I/O)。对于输入操作,进程I/O系统调用后,内核先看缓冲区是否有相应数据,无则到设备(比如网卡设备)读取(设备I/O慢,需等待),有则直接复制到用户进程空间。注册信号处理函数,进程运行不阻塞。

yxqq378287007的博客 1570

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

网络编程day05(循环服务器、并发服务器)

循环服务器、并发服务器(多进程、多线程、IO多路复用)

dghbs的博客 1665

服务器编程模型

在网络程序里面,通常的来讲都是许多客户机对应一个服务器.为了处理客户机的请求, 对服务端的程序就提出了特殊的要求.咱们学习一下目前最经常使用的服务器模型. 循环服务器:循环服务器在同一个时刻只能够响应一个客户端的请求 并发服务器:并发服务器在同一个时刻能够响应多个客户端的请求 9.1 循环服务器: UDP服务器 UDP循环服务器的实现很是简单: UDP服务器每次从套接字上读取一个客户端的请求,处理, 而后将结果返回给客户机. 能够用下面的算法来实现. socket(...); bind(.....

jusu10的博客 206

TCP(循环服务器)---Linux

一、模型 服务器模型可以分: 循环服务器:在同一时刻只能相应一个客户端的请求 并发服务器:在同一时刻可以相应多个客户端的请求 二、基础的TCP循环服务器 服务器端: #include <stdio.h> #include <sys/types.h> #include <stdlib.h> #include <sys/socket.h> #include <netinet/in.h> #include &...

qq_52467056的博客 3499

嵌入式养成计划-31-网络编程----TCP的并发服务器模型------IO模型--IO多路复用

六十七、 TCP的并发服务器模型. 67.1 循环服务器模型. 67.2 并发服务器模型. 六十八、IO模型. 68.1 阻塞IO. 68.2 非阻塞IO. 68.3 信号驱动IO. 68.4 IO多路复用(重点!!!). 68.4.1 select. 68.4.2 poll.

This code no bug! 349
上一篇: linux c 改变控制台输出字体颜色
下一篇: 并发服务器 典型模型
MrBugYang
博客等级 码龄18年 21粉丝 35原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值