java远程方法调用(rmi)--好_RMI(远程方法调用)简单实例

1.RMI简单来说就是本地只有接口去调用实现在另外一台机子上的方法而得到结果。下面写一简单例子,并且

在两台机子上测试过。

2.RMI编写步骤:

1)、定义一个远程接口的接口,该接口中的每一个方法必须声明它将产生一个RemoteException异常。

2)、定义一个实现该接口的类。 3)、创建一个服务器。 4). 创建一个客户程序进行RMI调用。

3.写接口 IHelloRMI.java

package com.rmi.interfaces;

import java.rmi.Remote;

import java.rmi.RemoteException;

public interface IHelloRMI extends Remote

//(必须继承Remote)

{

public

String sayHello() throws RemoteException;//必须声明式抛出异常

}

4.写实现类 HelloRMI .java

package com.rmi.impl;

import java.rmi.RemoteException;

import java.rmi.server.UnicastRemoteObject;

import com.rmi.interfaces.IHelloRMI;

//必须继承UnicastRemoteObject

public class HelloRMI extends

UnicastRemoteObject implements IHelloRMI

{

public

HelloRMI() throws RemoteException//必须得有一构造方法

{

super();

}

@Override

public

String sayHello() throws RemoteException

{

return "Hello RMI";

}

}

5.写服务器 RMIServer.java

package com.rmi.server;

import java.rmi.AlreadyBoundException;

import java.rmi.RemoteException;

import java.rmi.registry.LocateRegistry;

import java.rmi.registry.Registry;

import com.rmi.impl.HelloRMI;

public class RMIServer

{

public

static void main(String args[]) throws AlreadyBoundException

{

try

{

HelloRMI rmi = new HelloRMI();

Registry r = LocateRegistry.createRegistry(6666);

r.rebind("My_RMI", rmi);

System.out.println("starting.....");

}

catch (RemoteException e)

{

e.printStackTrace();

}

}

}

6.写客户端

package com.rmi.click;

import java.net.MalformedURLException;

import java.rmi.Naming;

import java.rmi.NotBoundException;

import java.rmi.RemoteException;

import com.rmi.interfaces.IHelloRMI;

public class Click

{

public

static void main(String args[])

{

try

{

IHelloRMI iRmi = (IHelloRMI)

Naming.lookup("rmi://192.168.203.1:6666/My_RMI");

System.out.println(iRmi.sayHello());

}

catch (MalformedURLException e)

{

e.printStackTrace();

}

catch (RemoteException e)

{

e.printStackTrace();

}

catch (NotBoundException e)

{

e.printStackTrace();

}

}

}

服务器端留接口,实现类,服务器即可,客户端留接口和客户端类即可,先将服务器端服务器运行起来,

然后运行客户端,注意如果你的电脑有多个网卡,注意客户端的Naming.lookup("rmi://192.168.203.1:6666/My_RMI")中的ip要写多哦,本人电脑由于安装了虚拟网卡,而服务端的LocateRegistry.createRegistry(6666);是在本地注册端口为6666,关键是这个本地使用的是到底哪张网卡呢,开始我的客户端老是报异常

java.rmi.ConnectIOException: Exception creating connection to:

10.10.10.1; neste

d exception is:

java.net.NoRouteToHostException: No route to host: connect

at sun.rmi.transport.tcp.TCPEndpoint.newSocket(Unknown

Source)

at sun.rmi.transport.tcp.TCPChannel.createConnection(Unknown

Source)

at sun.rmi.transport.tcp.TCPChannel.newConnection(Unknown

Source)

at sun.rmi.server.UnicastRef.invoke(Unknown Source)

at

java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(Unkn

own Source)

而10.10.10.1是我另一张网卡的ip,它根本就不找192.168.203.1,而禁用10.10.10.1网卡又老是禁不了,最后一气之下把10.10.10.1的网卡卸载了就正常了。

最后附上个人在在客户端打包和运行的过程

C:\>javac com/rmi/click/Click.java

com/rmi/interfaces/IHelloRMI.java

C:\>jar cvf rmi.jar com/rmi/click/Click.class

com/rmi/interfaces/IHelloRMI.class

标明清单(manifest)

增加:com/rmi/click/Click.class(读入= 890) (写出= 579)(压缩了 34%)

增加:com/rmi/interfaces/IHelloRMI.class(读入= 236) (写出= 179)(压缩了

24%)

C:\>java -cp rmi.jar com.rmi.click.Click

Hello RMI

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值