Artical--4--并发服务器
Artical–4--并发服务器
并发服务器用到了 fork() 和 信号量。测试时可以用之前的客户端代码。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <signal.h>
#include <sys/wait.h>
#include <arpa/inet.h>
#include <sys/socket.h>#define BUF_SIZE 30
void error_handling(char * message);
void read_childproc(int sig);int main(int argc,char * argv[])
{int serv_sock;int clnt_sock;char buf[BUF_SIZE];struct sockaddr_in serv_adr;struct sockaddr_in clnt_adr;pid_t pid;struct sigaction act;socklen_t adr_sz;int str_len,state;if(argc != 2){printf("usage : %s <port>\n",argv[0]);exit(1);}act.sa_handler=read_childproc;sigemptyset(&act.sa_mask);act.sa_flags=0;state=sigaction(SIGCHLD,&act,0);serv_sock=socket(PF_INET,SOCK_STREAM,0);memset(&serv_adr,0,sizeof(serv_adr));serv_adr.sin_family = AF_INET;serv_adr.sin_addr.s_addr=htonl(INADDR_ANY);serv_adr.sin_port=htons(atoi(argv[1]));if(bind(serv_sock,(struct sockaddr*)&serv_adr,sizeof(serv_adr))==-1)error_handling("bind() error");if(listen(serv_sock,5)==-1)error_handling("listen() error");while(1){adr_sz=sizeof(clnt_adr);clnt_sock=accept(serv_sock,(struct sockaddr*)&clnt_adr,&adr_sz); if(clnt_sock==-1){printf("clnt_sock is -1\n");continue;}elseputs("new client connected...");pid=fork();if(pid==-1){close(clnt_sock);continue;}if(pid==0){close(serv_sock);while((str_len=read(clnt_sock,buf,BUF_SIZE))!=0)write(clnt_sock,buf,str_len);close(clnt_sock);puts("client disconnected...");return 0;}elseclose(clnt_sock);}close(serv_sock);return 0;
}void read_childproc(int sig){pid_t pid;int status;pid=waitpid(-1,&status,WNOHANG);printf("removed proc id: %d\n",pid);
}
void error_handling(char *message)
{fputs(message,stderr);fputc('\n',stderr);exit(1);}
参考书籍:
《TCP/IP网络编程》
Artical--4--并发服务器相关推荐
- socket编程和并发服务器
socket这个词可以表示很多概念: 在TCP/IP协议中,"IP地址+TCP或UDP端口号"唯一标识网络通讯中的一个进程,"IP地址+端口号"就称为socke ...
- Linux 并发服务器雏形总结
如下介绍一个并发回射客户端/服务器的雏形,所谓回射:就是客户端输入一条数据,服务器端读取并显示,然后服务器端再把刚读取的信息发送回客户端进行显示.示意图如下: 所谓并发服务器:就是一个服务器可以同时为 ...
- 使用池来实现并发服务器
#使用池来实现并发服务器 import socket from multiprocessing import cpu_count,Pool from multiprocessing.pool impo ...
- 基于原子探索者stm32f407开发板的ucos-iii+lwip1.4.1的tcp server并发服务器完美解决例程(转)...
源:基于原子探索者stm32f407开发板的ucos-iii+lwip1.4.1的tcp server并发服务器完美解决例程 转载于:https://www.cnblogs.com/LittleTig ...
- 从简单到高并发服务器(一)
一个单线程的回声服务器 (Echo Server) 我们从一个简单的服务器开始说起. 它可以接受一个客户的连接,接收消息,然后把这个消息发送回去,关闭连接--完工.我们用 Linux 和 iOS / ...
- linux多进程网络实例,Linux下一个单进程并发服务器的实例 使用select
/*单进程并发服务器实例.该程序采用单进程并发服务器算法实现的.*/ #include #include #include #include #include #include #include #i ...
- 2高并发服务器:多线程服务器
1多线程并发服务器 在使用线程模型开发服务器时需要考虑以下问题: A调整进程最大文件描述符上限 B线程如有共享数据,考虑线程同步 C服务于客户端线程退出时,退出处理.(退出值,分离态) D系统负载,随 ...
- 1高并发服务器:多进程服务器
1多进程并发服务器 使用多进程并发服务器时要考虑以下几点: A.父最大文件描述个数(父进程中需要close关闭accept返回的新文件描述符) B.系统内创建进程个数(和内存大小相关) C.进程 ...
- 【Linux网络编程】并发服务器的三种实现模型
服务器设计技术有很多,按使用的协议来分有 TCP 服务器和 UDP 服务器,按处理方式来分有循环服务器和并发服务器. 循环服务器与并发服务器模型 在网络程序里面,一般来说都是许多客户对应一个服务器(多 ...
- 如何使用 Go 语言搭建企业级高并发服务器?
每到节假日和过年,需要外出通行的人几乎都会遇到一个问题:抢火车票!当全国上亿人都在固定的时间段抢票,服务器动辄就要承受上百万级并发的情况时,你就会明白,一个支持高并发的服务器架构有多重要! 在后端程序 ...
最新文章
- 白话红黑树系列之二——红黑树的构建
- ICLR2018 | 深度学习顶会见闻,干货资源都在这里(附源码、论文链接)
- 布赖恩·凯利看好比特币现金:更多的用例可以转化为价值
- Ubuntu “载入软件包列表失败”
- 转:WebApi(一)
- 一个 bug / Masonry的引入
- 腾讯正式开源图计算框架Plato,十亿级节点图计算进入分钟级时代
- iOS中的异步和多线程概况
- 使用util.js处理表格
- JAVA 16进制转字符串问题
- 数学知识整理:布朗运动与伊藤引理 (Ito‘s lemma)
- 行测:判断推理之图形推理
- yarn安装插件报错: An unexpected error occurred: “https://registry.npmjs.org/vue-router: connect ETIMEDOUT
- echarts设置图标图例legend为圆,长方形,扇形等
- PTA 背包问题凑零钱
- java计算器GUI科学型计算器
- Java统计代码的执行时间的6种方法
- 计算机电源管理最高续航,高效电源管理芯片 vivo TWS Neo最大支持27小时续航
- 游戏设计梦工厂读书笔记(三)
- Android:详细解析RSSI概念