简单的并发服务器
来源:互联网 发布:淘宝娃娃海报图片素材 编辑:程序博客网 时间:2024/05/22 04:57
服务器端代码:
#include <sys/socket.h>#include <sys/types.h>#include <netinet/in.h>#include <unistd.h>#include <stdio.h>#include <arpa/inet.h>#include <string.h>#include <stdlib.h>int main(int argc, char *argv[]){int listenfd,connfd;pid_t childpid;socklen_t clilen;struct sockaddr_in cliaddr,servaddr;listenfd = socket(AF_INET, SOCK_STREAM, 0);if(-1 == listenfd){printf("Create socket failed.\n");return -1;}bzero(&servaddr, sizeof(servaddr));servaddr.sin_family = AF_INET;servaddr.sin_addr.s_addr = htonl(INADDR_ANY);servaddr.sin_port = htons(45678);int res = bind(listenfd, (struct sockaddr *)&servaddr, sizeof(servaddr));if(0 != res){printf("Bind failed.\n");return -1;}res = listen(listenfd, 5);if(0 != res){printf("Listen failed.\n");}for(; ;){clilen = sizeof(cliaddr);connfd = accept(listenfd, (struct sockaddr *)&cliaddr, &clilen);if(-1 == connfd){printf("Accept failed.\n");return -1;}childpid = fork();if(0 > childpid){printf("Fork error.\n");return -1;}if(0 == childpid){close(listenfd);str_echo(connfd);close(connfd);exit(0);}else{close(connfd);}}close(listenfd);return 0;}
服务器端显示函数:
#include <unistd.h>#include <stdlib.h>#include <stdio.h>#include <string.h>#define MAXLINE 2048void str_echo(int sockfd){char buf[MAXLINE];ssize_t n;printf("This is server %d.\n",getpid());n= read(sockfd, buf, MAXLINE);printf("%s\n",buf);n =write(sockfd, buf, strlen(buf));}
客户端代码:
#include <sys/types.h>#include <sys/socket.h>#include <arpa/inet.h>#include <stdio.h>#include <netinet/in.h>#include <string.h>#include <unistd.h>int main(int argc, char * argv[]){int sockfd, res;struct sockaddr_in servaddr;if(2 != argc){printf("usage: %s.\n",argv[0]);return -1;}sockfd = socket(AF_INET, SOCK_STREAM, 0);if(-1 == sockfd){printf("Create socket failed.\n");return -1;}bzero(&servaddr, sizeof(servaddr));servaddr.sin_family = AF_INET;servaddr.sin_port = htons(45678);res = inet_pton(AF_INET, argv[1], &servaddr.sin_addr);if(1 != res){printf("Inet_pton error.\n");return -1;}res = connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr));if(0 != res){printf("Connect error.\n");return -1;}str_cli(stdin, sockfd);close(sockfd);return 0;}
客户端显示函数:
#include <unistd.h>#include <stdio.h>#include <string.h>#define MAXLINE 2048void str_cli(FILE *fp, int sockfd){char send[MAXLINE], recive[MAXLINE];while(fgets(send, MAXLINE, fp) != NULL) {size_t n = write(sockfd, send, strlen(send));read(sockfd, recive, MAXLINE);fputs(recive, stdout);}}测试结果:
服务器
abel@abel-ubuntu:~/Socket$ ./server2&[1] 5270abel@abel-ubuntu:~/Socket$ This is server 5396.zhouThis is server 5398.lee
客户1 和客户2
abel@abel-ubuntu:~/Socket$ ./client2 127.0.0.1leelee
abel@abel-ubuntu:~/Socket$ ./client2 127.0.0.1zhouzhou
总结:
并发服务器能够同时处理多个客户请求,适用于客户请求时间较长,客户较多的场合。并发服务器的典型模型是,在客户请求到来,服务器端accept函数返回之后。服务器fork出一个子进程来服务客户请求。父进程继续监听。
- 简单的并发服务器
- 简单的并发服务器
- Linux TCP 服务器编程(二):简单的并发服务器
- 一个简单的基于select的并发服务器
- 自己实现一个简单的支持并发的Web服务器
- 带你实现一个简单的MyApacheTomcat,迷你并发服务器
- TCP套接字编程实现简单的并发服务器
- UNIX网络编程笔记(3):简单的并发服务器
- 一个简单的高并发的回应服务器(5万并发)
- 一个简单的高并发的回应服务器(5万并发)
- 并发服务器的设计
- 并发服务器的实现
- fork()理解及简单并发服务器应用
- fork()理解及简单并发服务器应用
- Linux网络编程之简单并发服务器
- Linux网络编程之简单并发服务器
- Linux网络编程之简单并发服务器
- 网络编程学习_简单的多进程并发服务器/客户端
- android sdk manager在windows 8 64bit下闪退
- ffmpeg ios6.1编译
- linux文件/目录权限设置命令:chmod [who] [opt] [mode] 文件/目录名
- 一道面试题
- map删除元素
- 简单的并发服务器
- 模块化应用(systemlistview-32-upload)
- sharepoint 2010 根据指定用户UserID查询该用户列表数据
- Spring MVC 国际化
- Compile ARPACK x64 dll & lib For VS2005 On Windows 7 by Using MinGW64
- cocos2d-iphone之魔塔20层完结篇
- 改进型时间触发嵌入式系统编程模式
- IT 妹子伤不起啊:看女生是如何拒绝屌丝的求爱的……
- 函数(二)----Javascript语言精粹