文档详情

多进程并发服务器.doc

发布:2017-03-03约6.33千字共7页下载文档
文本预览下载声明
一、实验目的 理解进程的创建和终止方法; 熟悉父进程与子进程对描述符的操作过程; 学会编写基本的多进程并发服务器程序和客户程序。 二、实验平台 ubuntu-8.04 操作系统 三、实验内容 编写多进程并发服务器程序和客户程序,具体功能如下: 1、服务器等待接收客户的连接请求,一旦连接成功则显示客户地址,接着接收 客户端的名称并显示;然后接收来自该客户的字符串,每当收到一个字符串 时,显示该字符串,并将字符串按照恺撒密码的加密方式(K=3)进行加密, 再将加密后的字符发回客户端;之后,继续等待接收该客户的信息,直到客 户关闭连接。要求服务器具有同时处理多个客户请求的能力。 2、客户首先与相应的服务器建立连接;接着接收用户输入的客户端名称,并将 其发送给服务器;然后继续接收用户输入的字符串,再将字符串发送给服务 器,同时接收服务器发回的加密后的字符串并显示。之后,继续等待用户输 入字符串,直到用户输入 Ctrl+D,客户关闭连接并退出。 四、实验原理 前面所实现的服务器/客户程序中,服务器每次只能处理一个客户的请求, 他虽然很简单但效率低下。在实际应用中,这样的服务器不能满足实际需求,并 发技术可以极大地提高服务器的处理能力和响应速度。 TCP 并发服务器的工作流程见图 6.1 所示: 每个进程在初始化的时候,系统都分配了一个id号,用于标识此进程。在Linux中进程号是唯一的,系统可以用这个值来表示一个进程,描述进程的id号通常叫做PID,即进程id(process id)。PID的变量类型为pid_t, pid_t其实是一个typedef类型,定义为unsigned int。 1.函数getpid():返回当前进程的ID号。 2.函数getppid():返回当前进程的父进程的ID号。 进程的终止存在两个可能: 父进程先于子进程终止(init进程领养) 子进程先于主进程终止 五、实验步骤 1、登陆进入 ubuntu 操作系统,新建一个文件,命名为 mproc_server.c,新建另 一个文件,命名为 mproc_client.c。 2、在 mproc_server.c 和 mproc_client.c 中编写相应代码并保存。 3、打开一个“终端”,执行命令进入 mproc_server.c 和 mproc_client.c 所在目录。 4、执行命令 gcc –o mproc_server mproc_server.c 生成可执行文件 mproc_server。 5、执行命令 gcc –o mproc_client mproc_client.c 生成可执行文件 mproc_client。 6、执行命令./ mproc_server,运行服务器端。 7、打开第 2 个“终端”,执行命令进入 mproc_server.c 和 mproc_client.c 所在目录。 8、执行命令./ mproc_client 127.0.0.2,模拟客户 1。 9、打开第 3 个“终端”,执行命令进入 mproc_server.c 和 mproc_client.c 所在目录。 10、执行命令./ mproc_client 127.0.0.3,模拟客户 2。 11、打开第4 个“终端”,执行命令进入 mproc_server.c 和 mproc_client.c 所在目录。 12、执行命令./ mproc_client 127.0.0.4,模拟客户 3。 六、参考程序 1、mproc_server.c 内容如下: #include stdio.h #include stdlib.h #include string.h #include unistd.h #include sys/types.h #include sys/socket.h #include netinet/in.h #include arpa/inet.h #define PORT 1234 //定义端口号 #define BACKLOG 5 #define MAXDATASIZE 1000 //定义最大数据单元 void process_cli(int connfd, struct sockaddr_in client); main() { int listenfd, connfd; //标识套接口的描述字 pid_t pid; struct sockaddr_in server; //服务器端 struct sockaddr_in client; //客户端 int len;
显示全部
相似文档