分布式实验报告

  • 格式:pdf
  • 大小:593.81 KB
  • 文档页数:18

实验一、基于TCP的套接字编程

一、实验目的

用C或JAVA语言编写客户端、服务器端程序,实现基于TCP或UDP

的网络通信或数据传输服务,熟悉基于TCP或UDP的Socket编程原

理。

二、实验环境

建立在TCP/IP网络结构之上计算机网络实验环境。计算机具备

Windows环境中套接字socket的编程接口功能,可为用户提供全网范

围的进程通信功能。

三、实验要求

要求学生使用Linux或Windows平台下的套接字实现方式完成TCP客

户端与服务器端的通信实现,无界面化要求,功能实现即可。

四、实验内容

基于TCP的socket编程的大致实现过程如下--

1、编写服务器端程序如下:

import java.io.*;

import java.net.*;

public class TCPServer {

public static void main(String[] args) throws Exception{

ServerSocket server=null;

Socket client=null;

server=new ServerSocket(8888);

client=server.accept();

PrintWriter out=null;

out=new PrintWriter(client.getOutputStream());

out.println("Hello 阙凤林!");

out.close();

client.close();

server.close();

}

}

2、编写客户端程序如下:

import java.io.*;

import java.net.*;

public class TCPClient {

public static void main(String[] args)throws Exception {

Socket client=null;

BufferedReader buf=null;

client=new Socket("localhost",8888);

buf=new BufferedReader(new

InputStreamReader(client.getInputStream()));

System.out.println();

System.out.println(buf.readLine());

buf.close();

client.close(); }}

3、在DOS命令行下分别编译上述.java文件,生成对应的.class文

件,如下图所示:

4、打开主机端口:在“运行”框中输入Telnet,进入如下画面:

5、键入o localhost 8888 执行完上述结果后得到下图所示界面:

6、最后重新打开一个界面(服务器server保持运行状态),输入cmd,

执行客户端程序,得到运行结果如下:

实验二、一个RMI实例开发

一、实验目的

用C或JAVA语言编写客户端、服务器端程序,模拟实现不同操作系

统之间程序的方法调用。通过本实验,熟悉基于RMI的编程原理。

二、实验环境

建立在TCP/IP网络结构之上计算机网络实验环境。计算机具备

Windows环境中远程方法调用RMI的编程接口功能,可为用户提供全

网范围的进程通信功能。

三、实验要求

要求学生在Linux或Windows平台下完成客户端与服务器端的远程方

法调用,无界面化要求,功能实现即可。

四、实验内容

实现RMI分布式程序的大致过程如下:

1、自定义一个远程接口-----远程接口类,实现两个数的加法运算,

程序如下:

import java.rmi.*;

import java.rmi.server.*;

public interface AddServer extends Remote

{

public int addData(int a,int b)throws RemoteException;

}

2、定义和实现服务器中远程方法-----服务器类,程序如下:

import java.rmi.*;

import java.rmi.server.*;

public class AddServerImpl extends UnicastRemoteObject

implements AddServer

{

public AddServerImpl()throws RemoteException

{

super();

}

public int addData(int a,int b)throws RemoteException

{

return a+b;

}

public static void main(String s[])

{ try

{

AddServerImpl instance=new AddServerImpl();

Naming.rebind("add",instance);

System.out.println("Server

Registered");

}

catch(Exception e){System.out.println(e);}

}

}

3、定义与实现客户-----客户类,程序如下:

import java.io.*;

import java.rmi.*;

public class AddClient

{

public AddClient()

{

try

{

BufferedReader input=new

BufferedReader(new InputStreamReader(System.in));

System.out.println("Please enter first

number:");

System.out.flush();

String s=input.readLine();

int num1=Integer.parseInt(s);

System.out.println("Please enter second

number:");

System.out.flush();

s=input.readLine();

int num2=Integer.parseInt(s);

AddServer

addserver=(AddServer)Naming.lookup("rmi://127.0.0.1/add");

int i=addserver.addData(num1,num2);

System.out.print("Result is:"+i);

}catch(Exception e){System.out.println(e);}

}

public static void main(String s[])

{

new AddClient();

}

}

4、编译上述三个文件,得到相应的.class文件。

使

用rmci编译器,生成残根和框架代码。

5、创建安全策略。

6、启动RMI远程注册表。

7、启动服务器。

上述五步在dos命令行中执行过程如下图示:

8、启动客户端。

实验三:IP组播通信

一、实验目的

了解组播通信的原理,用C或JAVA语言编写一个简单的IP组播通信

程序,实现基于TCP或UDP的网络通信或数据传输服务。

二、实验环境

建立在TCP/IP网络结构之上计算机网络实验环境。

实验操作系统:windows7

开发工具:Microsoft Visual Studio 2008

三、实验要求

要求学生在Linux或Windows平台下完成IP组播通信的实现,无界

面化要求,功能实现即可。

四、实验内容

编写实验代码如下:

1、主程序入口点代码:(Program.cs) using System;

using System.Collections.Generic;

using System.Linq;

using System.Windows.Forms;

namespace Multicast {static class Program

{/// 应用程序的主入口点。

[STAThread]

static void Main()

{ Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false);

Application.Run(new Multicast());}

}

}

2、IP组播通讯的具体实现代码:(Groupcast.cs) using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing; using System.Linq;

using System.Text;

using System.Windows.Forms;

//添加多线程

using System.Threading; namespace Multicast

{ public partial class Multicast : Form

{public Multicast()

{InitializeComponent();

//禁用跨线程调用检查 TextBox.CheckForIllegalCrossThreadCalls = false;}

/// 组播对象

private GroupCast groupCast = new GroupCast();

/// 接收线程

private Thread receiver; /// 加入组播组