学习使用RMI框架,抄写了一段例子代码:
代码如下:
package com.you.rmi;
import java.rmi.Remote;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.server.UnicastRemoteObject;
import java.util.Date;
import javax.naming.Context;
import javax.naming.InitialContext;
public class SimpleServer {
public static void main(String[] args) {
try {
HelloService service1 = new HelloServiceImpl("service1");
HelloService service2 = new HelloServiceImpl("service2");
Context namingContext = new InitialContext();
LocateRegistry.createRegistry(1099);
namingContext.rebind("rmi://localhost:1099/HelloService1", service1);//rebind注册对象,把对象与一个名字
namingContext.rebind("rmi://localhost:1099/HelloService2", service2);//绑定,如果改名字已经被绑定,不过抛出异常
System.out.println("服务器注册了两个HelloService对象");
} catch (Exception e) {
e.printStackTrace();
}
}
}
interface HelloService extends Remote{
public String echo(String msg) throws RemoteException;
public Date getTime() throws RemoteException;
}
class HelloServiceImpl extends UnicastRemoteObject implements HelloService{
/**
*
*/
private static final long serialVersionUID = 1L;
private String name;
public HelloServiceImpl(String name) throws RemoteException{
this.name = name;
}
@Override
public String echo(String msg) {
System.out.println(name + "调用echo()方法");
return "echo:" + msg + "from" + name;
}
@Override
public Date getTime() {
System.out.println(name + "调用getTime()方法");
return new Date();
}
}
package com.you.rmi;
import java.rmi.RemoteException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NameClassPair;
import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
public class SimpleClient {
public static void showRemoteObjects(Context namingContext) throws Exception {
NamingEnumeration<NameClassPair> e = namingContext.list("rmi:");
while(e.hasMore())
System.out.println(e.next().getName());
}
public static void main(String[] args) {
try {
String url = "rmi://localhost/";
Context namingContext = new InitialContext();
//获得远程对象的存根对象
HelloService service1 = (HelloService) namingContext.lookup(url + "HelloService1");
HelloService service2 = (HelloService) namingContext.lookup(url + "HelloService2");
//测试存根对象所属的类
Class stubClass = service1.getClass();
System.out.println("service1 是" + stubClass.getName() + "的实例");
Class[] interfaces = stubClass.getInterfaces();
for(int i = 0; i < interfaces.length; i++) {
System.out.println("存根类实现了" + interfaces[i].getName());
System.out.println(service1.echo("hello"));
System.out.println(service1.getTime());
System.out.println(service2.echo("hello"));
System.out.println(service2.getTime());
showRemoteObjects(namingContext);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
java进阶网在例子中没有LocateRegistry.createRegistry(1099);这句代码,一开始运行的时候,总是报错,报服务器拒绝连接的错误,加上这句话就运行成功了,虽然rmi的默认端口是1099,但是需要告诉服务器一声,不然服务器不会得到通知,拒绝连接 。
分享到:
相关推荐
rmi基础知识学习笔记,从最简单的例子讲述rmi的用途
JavaEE5学习笔记02-JNDI与RMI.
rmi multi-core mips cpu program manual
用RMI技术写成的聊天室,可以简单地进行会话,可以实现群聊功能。
Good ea I think it is for Metatrader 4
使用java RMI技术实现不同计算机之间的文件传输
RMI RMI-IIOP 客户端服务器交互 源代码下载
创建客户端RMI调用服务端的应用程序。 启动服务端,再启动客户端,测试是否调用成功。 如果客户端和服务端不在同一台电脑上,则需要对刚才定义的服务类采用rmic 编译一个客户端的框架类_stub并拷贝到客户端的类...
rmi-lite java rmi source package
A java RMI server client math operator. Simple project for the network services class.
RMI从O开始,详细笔记,RMI从O开始,详细笔,记RMI从O开始,详细笔记
RMI Java Submission Program. Source code
RMI 的简单应用 ,使用Java RMI实现远程方法调用, 客户端 调用服务端方法
RMI教程 Java RMIRMI教程 Java RMIRMI教程 Java RMIRMI教程 Java RMIRMI教程 Java RMI
8. 输入ant -f build-rmi-client.xml可以看到第一个RMI示例演示成功。 注:需要把RegisterRocket.java和ShowRocketClient.java文档中的计算名和IP改成你自己机器的名称或IP。 问题:第一次运行成功,但是如果关掉...
在这次的项目中,对于客户端与服务器之间的通信,想了许多办法,由于做的是富客户端应用,最终将技术选定在了RMI和Java-sockets两种之间,其中RMI的灵活性不高,客户端和服务器端都必须是java编写,但使用比较方便,...
spring rmi 2.5.x版本与3.0.x版本不兼容解决方案
jar包,官方版本,自测可用
jar包,官方版本,自测可用