当前位置: 首页 > Linux

Linux迭代服务器

时间:2023-04-07 03:16:10 Linux

Linux迭代服务器最近在学习linux下的Socket开发。最简单的就是迭代服务器在网络程序中。通常,一台服务器处理多个客户端。为了从多个客户端发送请求,服务器端程序的处理方式不同。本节开始介绍Linux下socket编程的服务器模型选择,主要包括循环服务器模型、并发服务器模型、IO多路复用服务器模型等,这也是我们常见的网络服务器模型。基本上可以分为两类,迭代服务器:循环服务器,同一时刻只能响应一个客户端的请求,是一种比较简单的模型;concurrentserver:并发服务器可以同时响应多个client的请求,这里面有很多分类,下面会逐步介绍;迭代服务器模型迭代服务器是指客户端的请求和连接,服务器一个一个处理,处理完一个连接后再处理下一个连接,属于串行处理方式,结构比较简单。示例代码是从服务器向客户端输出日期和时间的功能。以下是服务器代码:server.c#include#include#include#include#include#include#include#include#defineBUFFLEN1024#defineSERVER_PORT12346#defineBACKLOG5intmain(intargc,char*argv[]){printf("等待对于客户端连接:\n");ints_s,s_c;/*服务器套接字文件描述符*/structsockaddr_inlocal,from;/*本地地址*/time_tnow;字符缓冲区[BUFFLEN];诠释n=0;intlen=sizeof(from);/*创建TCP套接字*/s_s=socket(AF_INET,SOCK_STREAM,0);/*初始化地址*/memset(&local,0,sizeof(local));local.sin_family=AF_INET;/*AF_INET协议族*/local.sin_addr.s_addr=htonl(INADDR_ANY);/*任何本地地址*/local.sin_port=htons(SERVER_PORT);/*服务器端口*//*描述socketfile字符绑定到本地地址和端口*/interr=bind(s_s,(structsockaddr*)&local,sizeof(local));err=listen(s_s,BACKLOG);/*listen*//*主进程*/while(1){/*接收客户端连接*/s_c=accept(s_s,(structsockaddr*)&from,&len);memset(buff,0,BUFFLEN);n=recv(s_c,buff,BUFFLEN,0);/*接收和发送方数据*/if(n>0&&!strncmp(buff,"TIME",4))/*判断是否合法接收数据*/{printf("有一个\n");memset(buff,0,BUFFLEN);现在=时间(NULL);sprintf(buff,"%12s\r\n",ctime(&now));send(s_c,buff,strlen(buff),0);/*发送数据*/sleep(10);//这里休眠10秒}close(s_c);}关闭(s_s);返回0;}以下是客户端代码:client.c#include#includeh>#include#include#include#defineBUFFLEN1024#defineSERVER_PORT12346intmain(intargc,char*argv[]){ints;/*服务器套接字文件描述符*/structsockaddr_inserver;/*本地地址*/charbuff[BUFFLEN];诠释n=0;/*建立TCP套接字*/s=socket(AF_INET,SOCK_STREAM,0);/*初始化地址*/memset(&server,0,sizeof(server));server.sin_family=AF_INET;/*AF_INET协议族*/server.sin_addr.s_addr=htonl(INADDR_ANY);/*任何本地地址*/server.sin_port=htons(SERVER_PORT);/*服务器端口*//*连接到服务器*/interr=connect(s,(structsockaddr*)&server,sizeof(server));memset(buff,0,BUFFLEN);strcpy(浅黄色,“时间”);/*发送数据*/send(s,buff,strlen(buff),0);memset(buff,0,BUFFLEN);/*接收数据*/n=recv(s,buff,BUFFLEN,0);if(n>0){printf("TIME:%s",buff);}关闭(S);返回0;}为了证明是迭代服务器,特意在服务器处理一个连接后sleep10秒,打开两个客户端,如图,可以看到时间间隔是10秒,因为循环服务器是成功的

最新推荐
猜你喜欢