博文可以在一个大的网络通信实现,但是,一个人只能起到,我们能够给每个clientfork()子进程,实现诸多的服务。
方法:
client连到server以后,server启动一个新创建的套接字对话。也就是说父进程能够继续连接下一个client。而子进程来须要处理
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); //一旦通信结束,子进程就应该退出程序,以防进入server的主循环 } close(connect_d); // 父进程关闭通信套接字,继续准备连接下一个client。然后再fork() }
总结
<1>socket()创建套接字
<2>server四部曲:
B=bind();
L=listen();
A=accept()。
B=開始对话;
<3>fork()克隆子进程。同一时候处理多个client
版权声明:本文博客原创文章。博客,未经同意,不得转载。