在网络程序里面,通常都是一个服务器处理多个客户机,为了出个多个客户机的请求,服务器端的程序有不同的处理方式。目前最常用的服务器模型:

1. 循环服务器:循环服务器在同一时刻只能响应一个客户端的请求。

2. 并发服务器:并发服务器在同一时刻可以响应多个客户端的请求。

  1. /* 循环服务器模型 TCP */ 
  2.  
  3. socket(); 
  4.  
  5. bind(); 
  6.  
  7. listen(); 
  8.  
  9. while(1) { 
  10.  
  11.     accept(); 
  12.  
  13.     while(1) { 
  14.  
  15.         recv(); 
  16.  
  17.         process(); 
  18.  
  19.         send(); 
  20.     } 
  21.  
  22. close(); 
  23. }
  1. /* 循环服务器模型 UDP */ 
  2.  
  3. socket(); 
  4.  
  5. bind(); 
  6.  
  7. while(1) { 
  8.  
  9.          recvfrom(); 
  10.  
  11.          process(); 
  12.  
  13.          sendto(); 
  14. }
  1. /* 并发服务器模型 多进程 以TCP为例 */  
  2.  
  3. socket();  
  4.       
  5. bind();  
  6.       
  7. listen();  
  8.       
  9. while(1) {  
  10.       
  11.     accept();   
  12.       
  13.     if(fork()==0) {      //创建子进程  
  14.       
  15.         while(1) { recv(); process(); send(); }  
  16.       
  17.         close();  
  18.       
  19.         exit();  
  20.      }  
  21.       
  22.      close();   
  23. }  
  1. /* 并发服务器模型 I/O多路复用 以TCP为例 */  
  2.       
  3. 初始化(socket->bind->listen);  
  4.       
  5. while(1) {  
  6.       
  7.     设置监听读写文件描述符集合 (FD_*);  
  8.       
  9.     select();  
  10.       
  11.     if(监听套接字就绪) {                //说明有新的连接请求 
  12.         
  13.         建立连接(accept); 
  14.    
  15.         加入到监听文件描述符集合;  
  16.     }  
  17.     else {                            //说明是已连接的描述符 
  18.         
  19.         进程操作(send或者recv); 
  20.     }  
  21. }