利用多进程/多线程实现多个客户端同时访问同一服务器

        如果实现一客户端与服务器的交互比较容易(直接用TCP的编程流程就可以实现,只是这样写出的程序只能是一个客户端交互释放连接后其他客户端才可以与服务器交互 ),但是要实现多个客户端同时与同一服务器的交互就相对复杂一点。

我们先给出服务器处理同一客户端的多次访问的伪代码:

                           

要实现多个客户端同时与同一服务器的交互,就要求服务器与客户端的交互要并发处理。我们就想到用多进程,或者多线程来实现。以下我们分别用多进程和多线程来实现多个客户端同时与同一服务器的交互。


多进程:启动多个进程,每个进程执行和一个客户端的交互。

  1. 父进程完成与客户端的连接工作,随后创建子进程,子进程与客户端具体交互。

  2.父进程需不需要把文件描述符传递给子进程?(不需要,因为在fork之前打开的文件描述符,子进程会继承父进程打开的文件描述符。)

  3.父进程需不需要关闭文件描述符?(需要,父进程关闭文件描述符并没有断开连接,只是将PCB中的struct file中的引用计数-1,等子进程也关闭文件描述符时才真正断开连接。而只有子进程关闭文件描述符父进程不关闭文件描述符,系统就会一直为其维护这一文件描述符,会造成资源的浪费。)

  4.防止僵尸进程,需要修改信号的响应方式。

具体代码如下:

服务器端:

#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<string.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<arpa/inet.h>
#include<netinet/in.h>
#include<pthread.h>
#include<signal.h>

void communication(int a)
{
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值