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编程指南