码迷,mamicode.com
首页 > 其他好文 > 详细

head first c<11>初探网络编程下

时间:2014-05-26 05:02:14      阅读:228      评论:0      收藏:0      [点我收藏+]

标签:网络编程   linux   c   

上一篇博文可以实现基本的网络通信,但是只能服务给一个人,我们可以通过给每个客户端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>初探网络编程下,布布扣,bubuko.com

head first c<11>初探网络编程下

标签:网络编程   linux   c   

原文地址:http://blog.csdn.net/wangxiaobupt/article/details/26669983

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!