当前位置:文档之家› 分布式实验报告

分布式实验报告

计算机科学与技术学院实验报告(学年度第学期)课程名称分布式实验名称分布式实验姓名学号专业计算机班级地点教师实验一:.NET Remoting一:实验目的和要求:目的:所谓.NET Remoting就是跨应用程序域边界调用程序集。

Remoting服务端承载远程对象,使外界能与之通信,对外的信道可以是HTTP、TCP或者IPC。

而我在此次试验中选择的是TCP。

最基本的.NET Remoting应用程序应该由三部分构成:∙服务端。

承载远程对象。

∙远程对象。

需要跨应用程序域边界调用的程序集。

∙客户端。

用于调用远程对象。

此次实验就是要在掌握的理论基础之上实现远程调用。

要求:1.进行实验预习工作;2.准备实验必须的完整程序流程及源代码;3.上机编程,调试程序,得到实验结果;4.写出实验报告二:实验环境:Visual Studio 2010三:实验步骤:首先下载安装Visual Studio 2010,此过程比较简单,在这就不介绍了。

远程对象是根本,服务端只是一个载体,那么我们就先要创建一个简单的远程对象:1.打开Visual Studio 2010,在在主界面中选择文件,选择“新建”→“项目”命令,新建一个Remoting类库项目。

2.把默认的Class1.cs重命名为RemoteObject.cs,打开cs文件,修改代码为:using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace Remoting{publicclass MyObject:MarshalByRefObject{//减法publicint Sub(int a, int b){return a - b;}//获得服务器时间publicstring GetDate(){return DateTime.Now.ToString();}}}在创建了远程对象后就需要创建Remoting服务端来发布这个远程对象了。

3.我使用Windows应用程序做服务端。

在解决方案中新建一个名为RemotingServer的控制台应用程序,把Program.cs修改成如下:using System;using System.Collections.Generic;using System.Linq;using System.Windows.Forms;namespace RemotingServer{staticclass Program{///应用程序的主入口点[STAThread]staticvoid Main(){Application.EnableVisualStyles();Application.SetCompatibleTextRenderingDefault(false);Application.Run(new RemotingServer());}}}4.使用.NET Remoting发布远程对象并不复杂,首先需要告知程序使用哪种信道发布远程对象。

在这里我们选择TCP信道,并在40001端口通信。

然后我们来完成用客户端应用程序调用远程对象。

客户端应用程序使用应用程序作为客户端。

privatestaticstring RemotingMethod_1(int num1, int num2, outint result){//声明远程服务端对象Remoting.MyObject mo =(Remoting.MyObject)Activator.GetObject(typeof(Remoting.MyObject), "tcp://localhost:40001/myObject");//调用服务器端对象的方法result = mo.Sub(num1, num2);string date = mo.GetDate();return date;}在这里,我们从远程地址tcp://localhost:40001/myObject创建远程对象,并调用了对象的Sub()方法。

myObject就是在服务端中为知名对象起的名字。

5.在服务器端创建RemotingServer.cs,代码如下:using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;//需要在解决方案的引用中添加System.Runtime.Remotingusing System.Runtime.Remoting;using System.Runtime.Remoting.Channels;using System.Runtime.Remoting.Channels.Tcp;namespace RemotingServer{publicpartialclass RemotingServer : Form{public RemotingServer(){InitializeComponent();}privatevoid btnStart_Click(object sender, EventArgs e){//注册服务端对象RemotingConfig_1();//显示消息txtMessage.Text = "Congratulations ! \r\nRemoting服务启动成功;//禁用服务启动按钮btnStart.Enabled = false;}privatestaticvoid RemotingConfig_1(){//创建TCP信道,端口为40001TcpChannel tc = new TcpChannel(40001);//注册TCP信道ChannelServices.RegisterChannel(tc, false);//注册在服务器激活的知名对象wellKnownRemotingConfiguration.RegisterWellKnownServiceType(typeof(Remoting.MyObject), "myObject", WellKnownObjectMode.SingleCall);}}}6.在客户端创建Client.cs,代码如下:using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;//读取配置文件using System.Configuration;namespace RemotingClient{publicpartialclass Client : Form{public Client(){InitializeComponent();}privatevoid btnRemoting_Click(object sender, EventArgs e) {//保存转换后的整数int num1 = 0;int num2 = 0;//读取输入的字符string strNum1 = txtNum1.Text.Trim();string strNum2 = txtNum2.Text.Trim();//检测数字输入是否正确if (Int32.TryParse(strNum1, out num1) != true){txtResult.Text = "请输入正确的数字";return;}//检测数字输入是否正确if (Int32.TryParse(strNum2, out num2) != true){txtResult.Text = "请输入正确的数字";return;}//调用服务端方法int result;string date = RemotingMethod_2(num1, num2, out result);//格式化结果字符串string message = string.Format("远程对象返回的计算结果为:{0},服务器时间为:{1}",result,date);//显示计算结果txtResult.Text = (message + Environment.NewLine);}privatestaticstring RemotingMethod_1(int num1, int num2, outint result){//声明远程服务端对象Remoting.MyObject mo = (Remoting.MyObject)Activator.GetObject(typeof(Remoting.MyObject), "tcp://localhost:40001/myObject");//调用服务器端对象的方法result = mo.Sub(num1, num2);string date = mo.GetDate();return date;}}}7.最后还要添加两个app.config:服务器端的app.config的代码如下:<?xml version="1.0"encoding="utf-8" ?><configuration><system.runtime.remoting><application name="RemoteHostService"><service><wellknown type="Remoting.MyObject, Remoting"objectUri="myObject"mode="SingleCall" /></service><channels><channel ref="tcp"port="40001" /></channels></application></system.runtime.remoting></configuration>客户端的app.config的代码如下:<?xml version="1.0"encoding="utf-8" ?><configuration><appSettings><add key="TCPChannel"value="tcp://localhost:40001/myObject"/> </appSettings></configuration>四:实验结果按Ctrl + f5执行,出现:点击启动Remoting服务,出现:接着按照下面图所示执行操作出现下图:输入正确的数据(例如分别输入7和3),可以得到以下截图:看到这个结果说明此次试验时成功的。

相关主题