分布式实验报告

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

计算机科学与技术学院

实验报告

(学年度第学期)

课程名称分布式

实验名称分布式实验

姓名学号

专业计算机班级

地点教师

实验一:.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.Remoting

using 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信道,端口为40001

TcpChannel tc = new TcpChannel(40001);

//注册TCP信道

ChannelServices.RegisterChannel(tc, false);

//注册在服务器激活的知名对象wellKnown

RemotingConfiguration.RegisterWellKnownServiceType(typeof(Remoting.MyObject), "myObject", WellKnownObjectMode.SingleCall);

}

相关文档
最新文档