【UNIX网络编程】4.13并发服务器实现
2014-06-30 00:11
246 查看
这个与上一节的程序相比很简单,就是将循环中Accept()以后的运行程序,让子进程来完成。由fork()程序来创建子进程。父进程基本不做工作(除了必须关闭相关的套接字)。其中必须声明新的变量pid_t pid;
完整服务器代码
for(;;){ len = sizeof(cliaddr); connfd = Accept(listenfd,(SA *)&cliaddr,&len); if( (pid = Fork()) == 0){ //完全交给子程序去处理 Close(listenfd); //千万要记得将监听到截止关掉,已经没用 printf("connection from %s,port %d\n", inet_ntop(AF_INET,&cliaddr.sin_addr,buf,sizeof(buf)), ntohs(cliaddr.sin_port) ); ticks = time(NULL); snprintf(buf,sizeof(buf),"%.24s\t\n",ctime(&ticks)); Write(connfd,buf,strlen(buf)); Close(connfd); exit(0); } Close(connfd); }
完整服务器代码
#include "unp.h" #include <unistd.h> int main(int argc,int **argv) { int listenfd,connfd; socklen_t len; struct sockaddr_in servaddr,cliaddr; char buf[MAXLINE]; time_t ticks; pid_t pid; listenfd = socket(AF_INET,SOCK_STREAM,0); bzero(&servaddr,sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_port = htons(13); servaddr.sin_addr.s_addr = htonl(INADDR_ANY); Bind(listenfd,(SA *)&servaddr,sizeof(servaddr)); Listen(listenfd,LISTENQ); for(;;){ len = sizeof(cliaddr); connfd = Accept(listenfd,(SA *)&cliaddr,&len); if( (pid = Fork()) == 0){ //完全交给子程序去处理 Close(listenfd); //千万要记得将监听到截止关掉,已经没用 printf("connection from %s,port %d\n", inet_ntop(AF_INET,&cliaddr.sin_addr,buf,sizeof(buf)), ntohs(cliaddr.sin_port) ); ticks = time(NULL); snprintf(buf,sizeof(buf),"%.24s\t\n",ctime(&ticks)); Write(connfd,buf,strlen(buf)); Close(connfd); exit(0); } Close(connfd); } return 0; }
相关文章推荐
- UNIX网络编程--实现并发UDP服务器
- Unix网络编程(七)使用select来实现服务器的并发
- C#如何实现用socket建立并发服务器模型?
- Linux下突破限制实现高并发量服务器
- 实现TCP并发服务器之三(select函数)
- LINUX环境并发服务器的三种实现模型
- LINUX环境并发服务器的三种实现模型
- 多php服务器实现多session并发运行
- 带你实现一个简单的MyApacheTomcat,迷你并发服务器
- 实现TCP并发服务器之一(多进程)
- 大并发网络服务器实现
- Linux下两种TCP网络服务器实现方式:循环服务&并发服务
- Linux下突破连接限制实现高并发量服务器
- 使用Select I/O模型来实现一个并发处理多个客户端的TCP服务器
- [转]利用单台PC服务器实现百万级并发访问的WEB服务器的方法
- 实现TCP并发服务器之二(多线程)
- Ubuntu下c语言实现并发服务器简单socket编程实例
- 高性能并发Web服务器实现核心内幕
- Select I/O模型来实现一个并发处理多个客户端的TCP服务器
- 实现TCP并发服务器之五(epoll函数)