企业网站维护是指,wordpress 插件交互,个人电子邮件注册网站申请,可以自己做攻略的网站#x1f525;博客主页#xff1a; 我要成为C领域大神#x1f3a5;系列专栏#xff1a;【C核心编程】 【计算机网络】 【Linux编程】 【操作系统】 ❤️感谢大家点赞#x1f44d;收藏⭐评论✍️ 本博客致力于知识分享#xff0c;与更多的人进行学习交流
单进程服务器 … 博客主页 我要成为C领域大神系列专栏【C核心编程】 【计算机网络】 【Linux编程】 【操作系统】 ❤️感谢大家点赞收藏⭐评论✍️ 本博客致力于知识分享与更多的人进行学习交流
单进程服务器
处理流程
1、客户端发送请求
2、服务端处理请求
3、服务端发送响应
4、客户端接收响应 使用单进程服务器测试业务
客户端向标准输入发送小写字符串服务端响应回复对应大写字符abcAS-ABCAS
客户端向服务端发送关键字localtime服务端响应回复系统时间、
服务端
#include stdio.h
#include stdlib.h
#include arpa/inet.h
#include sys/socket.h
#include string.h
#include time.h#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 1500int 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_familyAF_INET;serverAddr.sin_porthtons(_PORT);serverAddr.sin_addr.s_addrhtonl(INADDR_ANY);server_fdsocket(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){Addrlensizeof(clientAddr);if((client_fdaccept(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((recvlenrecv(client_fd,Result,sizeof(Result),0))0){printf(Client Say:%s\n,Result);if(strcmp(Result,localtime)0){tptime(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_flag0;while(recvlentoupper_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 stdio.h
#include stdlib.h
#include unistd.h
#include string.h
#include sys/socket.h
#include arpa/inet.h//客户端源码编写连接服务器成功服务器反馈信息#define _IP xxx.xxx.xxx.xxx//这里修改为你服务器的IP地址
#define _PORT 8080
int main()
{struct sockaddr_in ServerAddr;bzero(ServerAddr,sizeof(ServerAddr));ServerAddr.sin_familyAF_INET;ServerAddr.sin_porthtons(_PORT);inet_pton(AF_INET,_IP,ServerAddr.sin_addr.s_addr);int Myfdsocket(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((recvlenrecv(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;
}完成了大小写转换系统时间的响应 当再打开一个终端因为只有一个进程响应客户端所以新的客户端进程被阻塞了。只有上一个进程退出新的客户端进程才能连接 缺点一次只能处理一个客户端