分类: LINUX
2010-09-12 12:01:39
TCP循环服务器伪代码如下:
//sever: #include <...> int main() { socket(); 初始化本地地址; bind(); listem(); while(1){ accept(); recv(); ... send(); } ... } //client: #include <...> int main() { socket(); 初始化客户端本地地址; connect(); send(); recv(); ... ... }多进程同时等待连接:在服务器端,首先创建n个进程,每个进程独自处理客户端连接请求。
//server: #include <...> int main() { socket(); 初始化服务器端本地地址; bind(); listen(); for(i=0;i<创建的进程数;i++){ pid[i] = fork(); if(pid[i] == 0){ while(1){ accept(); recv(); ... send(); } } } while(1); ... } //client: #include <...> int main() { socket(); 初始化客户端本地地址; connect(); send(); recv(); ... ... }单客户端单进程,统一accept():TCP并发服务器,在处理客户端请求之前,先分叉几个子进程,对于多个客户端的请求,由多个子进程进行处理,和循环服务器相比较并发的TCP程序,在处理客户端请求时不是简单的使用while进行客户端请求的串行处理。这样的服务器从总体上看,是一个任务分配的过程,主程序接受任务并进行任务分发,fork出来的进程处理主程序分发来的客户端的请求任务并进行处理和响应,最后的连接关闭在处理程序中进行。
//server: #include <...> int main() { socket(); 初始化服务器端本地地址; bind(); listen(); while(1){ s_c = accept(); if(sc > 0){ if(fork() > 0){ close(s_c); }else{ recv(); ... send(); close(s_c); } } } } //client: #include <...> int main() { socket(); 初始化客户端本地地址; connect(); send(); recv(); ... ... }单客户端单线程,统一accept():与进程相比,线程有很多优点,例如速度快,占用资源少,数据可以共享。
//server: #include <...> handle_request(void *argv) { recv(); send(); } int main() { pthread_t thread_do; socket(); 初始化服务器端本地地址; bind(); listen(); while(1){ s_c = accepet(); if(s_c > 0){ int err = pthread_create(&thread_do,NULL,handle_request,(void *)&s_c); } } } //client: #include <...> int main() { socket(); 初始化客户端本地地址; connect(); send(); recv(); ... ... }chinaunix网友2010-09-13 14:55:18
很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com