1. 原理
在Linux C 网络编程——4. 简单TCP Socket程序中实现了一个最基本的基于TCP的CS通信,
这里介绍一种可以允许Server端可以同时处理多个请求(并发服务器)。
原理:每次accept服务器调用fork(),创建一个子进程处理请求。
2. 实现
只需要修改上一篇文章中的Server.c的while循环即可
- while(1)
- {
- addr_len = sizeof( caddr );
- connfd = accept( listenfd, (struct sockaddr*)&caddr, &addr_len );
- n = fork();
- if( n == -1 )
- {
- perror("call to fork");
- exit(1);
- }
- else if( n == 0 ) //child process
- {
- close( listenfd );
- while(1)
- {
- n = recv( listenfd, buf, 100, 0 );
- printf("Recive from %s : %d \n", inet_ntop( AF_INET, &caddr.sin_addr, str, sizeof(str) ), ntohs(caddr.sin_port) );
- for(i=0; i<n; i++)
- {
- buf[i] = toupper( buf[i] );
- }
- //write( connfd, buf, n+1 );
- send( connfd, buf, n+1, 0 );
- printf("Send : %s \n", buf);
- close( connfd );
- }//while
- }//
- else // father process
- {
- close( connfd );
- }
- }//while -- father
3. 参考
[1] Linux C编程一站式学习
[2] Linux 环境下C编程指南