head first c<11>初探网络编程下
2014-05-23 09:48
369 查看
上一篇博文可以实现基本的网络通信,但是只能服务给一个人,我们可以通过给每个客户端fork()一个子进程,来实现一对多的服务。
方法:
客户端连到服务器以后,服务器启动一个新创建的套接字对话,也就是说父进程可以继续连接下一个客户端,而子进程来需要处理
accept()创建的副套接字,实现通信功能。父进程克隆子进程后可以关闭副套接字close(connect_d),而子进程可以关闭主监听套接
字close(listener_d)。
说了半天就是,一个只负责拉客,一个只负责接客.
总结
<1>socket()创建套接字
<2>服务器四部曲:
B=bind();
L=listen();
A=accept();
B=开始对话;
<3>fork()克隆子进程,同时处理多个客户端
方法:
客户端连到服务器以后,服务器启动一个新创建的套接字对话,也就是说父进程可以继续连接下一个客户端,而子进程来需要处理
accept()创建的副套接字,实现通信功能。父进程克隆子进程后可以关闭副套接字close(connect_d),而子进程可以关闭主监听套接
字close(listener_d)。
说了半天就是,一个只负责拉客,一个只负责接客.
while(1) { int connect_d = accept(listener_d,(struct sockaddr *)&client_addr,&address_size); if (connect_d == -1) error("无法打开副套接字"); if(!fork()) //如果返回0,说明我在子进程中 { close(listener_d); //关闭监听套接字 process(); //通信过程 close(connect_d); //结束后,关闭通信套接字 exit(0); //一旦通信结束,子进程就应该退出程序,以防进入服务器的主循环 } close(connect_d); // 父进程关闭通信套接字,继续准备连接下一个客户端,然后再fork() }
总结
<1>socket()创建套接字
<2>服务器四部曲:
B=bind();
L=listen();
A=accept();
B=开始对话;
<3>fork()克隆子进程,同时处理多个客户端
相关文章推荐
- head first c<11>初探网络编程上
- head first c<11>初探网络编程上
- head first c<11>初探网络编程上
- head first c<11>在根据网络编程
- <Head First SQL Your Brain on SQL>读书笔记
- 网络编程笔记<1>
- head first c 笔记<4> 之分而治之
- 网络编程(转)<下>
- head first c<12>初探线程
- <<C++网络编程 卷1 运用ACE和模式消除复杂性>>
- <Head First Java>学习笔记--第一章:基本概念
- 【UNIX】网络编程之在线词典编程初稿<不稳定>
- 看<Headfirst Python>,学习过程中阅读的博客文
- <Head First Java>学习笔记--第二章:类与对象
- 网络编程(转)&lt;下&gt;
- head first c 笔记<2>
- Java基础<十四>_网络编程
- 黑马程序员 java基础<八>--网络编程(2)
- 网络编程笔记<4> 客户端 TCP IOCP
- <<Python基础教程>>学习笔记 | 第14章 | 网络编程