多进程并发服务器.doc
文本预览下载声明
一、实验目的
理解进程的创建和终止方法;
熟悉父进程与子进程对描述符的操作过程;
学会编写基本的多进程并发服务器程序和客户程序。
二、实验平台
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;
显示全部