【高性能服务器】单进程服务器
创始人
2025-01-21 10:03:06
0次

🔥博客主页: 我要成为C++领域大神
🎥系列专栏:【C++核心编程】 【计算机网络】 【Linux编程】 【操作系统】
❤️感谢大家点赞👍收藏⭐评论✍️

本博客致力于知识分享,与更多的人进行学习交流

​

单进程服务器

处理流程:

1、客户端发送请求

2、服务端处理请求

3、服务端发送响应

4、客户端接收响应

使用单进程服务器测试业务:

客户端向标准输入发送小写字符串,服务端响应回复对应大写字符,"abcAS"->"ABCAS"

客户端向服务端发送关键字localtime,服务端响应回复系统时间、

服务端:

#include  #include  #include  #include  #include  #include   #define _SERVER_IP "xxx.xxx.xxx.xxx"//这里修改为你服务器的IP地址 #define _PORT 8080 #define _BACKLOG 128 #define _SHUTDOWN 1 #define _TRUE 1 #define _FALSE 0 #define _IPSIZE 16 #define _RECVLEN 1500   int main() {     int recvlen;         struct sockaddr_in serverAddr,clientAddr;         int server_fd;         int client_fd;         char Result[_RECVLEN];         char client_ip[_IPSIZE];         socklen_t Addrlen;         serverAddr.sin_family=AF_INET;         serverAddr.sin_port=htons(_PORT);         serverAddr.sin_addr.s_addr=htonl(INADDR_ANY);         server_fd=socket(AF_INET,SOCK_STREAM,0);         bind(server_fd,(struct sockaddr*)&serverAddr,sizeof(serverAddr));         listen(server_fd,_BACKLOG);         printf("Test TCP Server Version 1.1.0 is Running...\n");         time_t tp;     char time_buf[100];//存放当前系统时间     int toupper_flag;     while(_SHUTDOWN)         {         Addrlen=sizeof(clientAddr);         if((client_fd=accept(server_fd,(struct sockaddr*)&clientAddr,&Addrlen))>0)         {        //Socket通信            bzero(Result,sizeof(Result));            bzero(client_ip,sizeof(client_ip));            inet_ntop(AF_INET,&clientAddr.sin_addr.s_addr,client_ip,_IPSIZE);            printf("Connection From :IP[%s],PORT[%d]\n",client_ip,ntohs(clientAddr.sin_port));            sprintf(Result,"Hi [%s] Welcome to my TCP test server!service version 1.1.0...",client_ip);            send(client_fd,Result,strlen(Result),0);            //读取用户数据1,如果用户发的是普通小写字符字符串,转换为大写,如果发送的是local关键字,响应时间         bzero(Result,sizeof(Result));        //持续响应,循环读写        while((recvlen=recv(client_fd,Result,sizeof(Result),0))>0)        {         printf("Client Say:%s\n",Result);         if(strcmp(Result,"localtime")==0)         {         tp=time(NULL);//获取时间种子         ctime_r(&tp,time_buf);         time_buf[strcspn(time_buf,"\n")]='\0';         printf("[%s]Response SysTime Successfully!\n",client_ip);         send(client_fd,time_buf,strlen(time_buf)+1,0);         }         else         {         toupper_flag=0;         while(recvlen>toupper_flag)         {             Result[toupper_flag]=toupper(Result[toupper_flag]);             ++toupper_flag;         }         printf("[%s]Response Toupper Successfully!\n",client_ip);         send(client_fd,Result,recvlen,0);         }        }        close(client_fd);         }         else         {         perror("accpet failed");         close(server_fd);         exit(0);         }         }         close(server_fd);         return 0; }

客户端:

#include  #include  #include  #include  #include  #include   //客户端源码编写,连接服务器成功,服务器反馈信息  #define _IP "xxx.xxx.xxx.xxx"//这里修改为你服务器的IP地址 #define _PORT 8080 int main() {     struct sockaddr_in ServerAddr;     bzero(&ServerAddr,sizeof(ServerAddr));     ServerAddr.sin_family=AF_INET; 	ServerAddr.sin_port=htons(_PORT);     inet_pton(AF_INET,_IP,&ServerAddr.sin_addr.s_addr);          int Myfd=socket(AF_INET,SOCK_STREAM,0);     //看需求决定是否要绑定     char Response[1024];//存放服务端反馈信息     ssize_t recvlen;     bzero(Response,sizeof(Response));      if((connect(Myfd,(struct sockaddr *)&ServerAddr,sizeof(ServerAddr)))==0)     {         if((recvlen=recv(Myfd,Response,sizeof(Response),0))>0)         {             printf("%s\n",Response);         }     }     else     {         printf("Connect failed\n");         close(Myfd);         exit(0);     }     close(Myfd);     printf("Client is Over\n");     return 0; } 

完成了大小写转换,系统时间的响应:

当再打开一个终端:因为只有一个进程响应客户端,所以新的客户端进程被阻塞了。只有上一个进程退出,新的客户端进程才能连接

缺点:一次只能处理一个客户端

相关内容

热门资讯

实测交流透视挂!宝玛大厅ai智... 实测交流透视挂!宝玛大厅ai智能透视挂教程,宝玛大厅破解软件经验(本来有挂辅助)1、每一步都需要思考...
总算了解辅助器!朱雀吴江三缺一... 总算了解辅助器!朱雀吴江三缺一ai智能透视辅助挂技巧,朱雀吴江三缺一好像是有挂(有辅助挂细节)朱雀吴...
今日公布透视!九五至尊大厅ai... 今日公布透视!九五至尊大厅ai智能透视插件,九五至尊大厅有没有透视挂窍门(切实有挂技术)1、在九五至...
玩家必看科普开挂!聚闲麻将ai... 玩家必看科普开挂!聚闲麻将ai智能透视辅助挂软件,聚闲麻将总是真的有挂(有辅助挂方式)聚闲麻将能透视...
据报道开挂!旅游娱乐ai智能开... 据报道开挂!旅游娱乐ai智能开挂工具,旅游娱乐辅助工具演示(一直有挂教学)1、全新机制【旅游娱乐ai...
一分钟揭秘开挂!决胜朋来麻将a... 一分钟揭秘开挂!决胜朋来麻将ai智能透视辅助挂教程,决胜朋来麻将真是真的是有挂(有辅助挂总结)1、首...
如何分辨真伪透视!红牛ai智能... 如何分辨真伪透视!红牛ai智能透视攻略,红牛是不是有挂经验(真是有挂技术)1、操作简单,无需红牛手机...
2分钟细说辅助器!江湖大庆麻将... 2分钟细说辅助器!江湖大庆麻将ai智能透视辅助挂攻略,江湖大庆麻将竟然是真的有挂(有辅助挂头条)1、...
总算清楚透视挂!老夫子厅ai智... 总算清楚透视挂!老夫子厅ai智能透视挂技巧,老夫子厅怎么开挂课程(好像发现有挂)老夫子厅破解侠是真的...
解密关于辅助!菜鸟麻将ai智能... 解密关于辅助!菜鸟麻将ai智能透视辅助挂脚本,菜鸟麻将总是存在有挂(有辅助挂存在)1、用户打开应用后...