RPC实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

南华大学计算机科学与技术学院
实验报告
(2010~2011学年度第2学期)
课程名称分布式系统
题目实现一个RPC应用程序姓名蒋小慧学号20084440220 专业计算机班级计算机082
地点8栋实验室教师徐卓然
实现一个RPC应用程序(实验报告)
㈠实验内容
创建一个简单的客户机——服务器的分布式应用程序,实现客户应用程序在一个远程过程调用中,向服务器传递一组无序的整数,经过服务器端的排序后,将有序整数数组从客户机端输出。

㈡处理流程
1.开发接口,具体步骤包括:
①创建接口模板
在命令行方式下运行uuidgen工具,生成文件qsort.idl
D:\Program Files\Microsoft Visual Studio\Common\Tools>uuidgen /I /oqsort.idl
②替换qsort.idl中接口的定义,改为:
interface qsort
{ //远程过程调用的数组排序函数
void QsortProc([in,out] int a[100],[in] int left,[in] int right); void Shutdown(void);
}
③使用文本编辑器编写ACF(属性配置文件),qsort.acf
[
implicit_handle (handle_t qsort_IfHandle)
]
interface qsort
{
}
④使用MIDL编译器进行编译(注:qsort.idl和qsort.acf都放Bin目录下)在命令行方式下运行MIDL.EXE,编译后生成文件qsort.h、qsort_c.c、qsort_s.c D:\Program Files\Microsoft Visual Studio\VC98\Bin>midl qsort.idl
2.开发服务器程序,具体步骤包括:
①编写服务器源程序qsorts.c,其中包括了内存管理函数,同时也必须导入
qsort.h头文件
②编写远程排序调用函数,其在qsortp.c中实现;同时qsortp.c中也包括了
终止服务器程序函数Shutdown
③在VC环境下编译和链接服务器端程序,(包括先前生成的服务器存根
qsort_s.c)最终生成qsorts.exe文件
注:在VC中Project->Settings->Link中添加两个RPC运行库:rpcrt4.lib 和 rpcns4.lib
3.开发客户机程序,具体步骤包括:
①编写服务器源程序qsortc.c,其中也包括内存管理函数,同时也必须导
qsort.h头文件。

客户端会向服务器发送一组数,请求远程排序调用QsortProc( ,,)
②在VC工程中添加先前生成的客户机存根qsort_c.c
③在VC环境下编译和链接客户端程序,最终生成qsortc.exe文件
注:同上,也需在此工程中添加rpcrt4.lib和rpcns4.lib
㈢实验算法分析
1.远程过程调用QsortProc(int*,int,int)中主要包括一个数组的快速排序算法:
void QuickSort(int a[100],int left,int right) //进行快速排序
{
int i,j,mid,temp;
i=left;
j=right;
mid=a[(left+right)/2]; //求中间值
do
{
while(a[i]<mid && i<right) i++; //从左边查找比中间值大的
while(a[j]>mid && j>left) j--; //从右边查找比中间值小的
if(i<=j) //找到一对,进行交换
{
temp=a[i];
a[i]=a[j];
a[j]=temp;
i++;
j--;
}
}while(i<=j); //如果两边查找的下标交错就停止循环,完成第一趟查找
//每一趟查找后将数组分成左,右两大块(左小右大)
if(left<j)
QuickSort(a,left,j); //递归左半部分,进行快速排序 if(right>i)
QuickSort(a,i,right); //递归右半部分,进行快速排序
}
2.其它函数及文件的功能分析见源代码注释
㈣程序源代码清单(源代码见附件)
文件简单描述
QSORT.IDL 接口定义语言文件
QSORT.ACF 属性配置文件
QSORT.H 头文件
QSORT_C.C 客户端存根
QSORT_S.C 服务器端存根
QSORTC.C 客户端主程序
QSORTS.C 服务器端主程序
QSORTP.C 远程调用程序
㈤运行结果
1.运行服务器端,结果如图(1)
2.运行客户端,结果如图(2)
图(2) 3.客户端运行后,服务器端变为:(如图3)
㈥实验结果分析
服务器端运行后,一直处于监听状态,等待客户端请求。

运行客户端后,客户端通过远程调用QsortProc(int*,int,int),将初始数组
int b[100]={45,33,67,23,89,54,93,12,78,26}传递给服务器,服务器的远程处理函数将其排序后输出;由于void QsortProc([in,out] int a[100],[in] int left,[in] int right)中的第一个参数是[in,out]型,表示客户机和服务器可以相互传递,所以服务器端的数组发生改变后,客户端的也相应发生改变。

这可以通过客户端远程调用后再将数组b[]输出的结果得以验证。

相关文档
最新文档