Java Rmi 远程方法调用

原创 2012年03月25日 22:57:45

一: 服务端  暴露服务

import java.rmi.Remote;
import java.rmi.RemoteException;

/**
 * 1.定义远程接口,必须继承Remote接口,
 * 2.远程调用的方法必须抛出RemoteException异常 
 */
public interface ISayHello extends Remote {
	
	/**
	 * @param name
	 * @return
	 * @throws RemoteException  远程调用方法必须抛出RemoteException
	 */
	public String doSayHello(String name) throws RemoteException;
}

 

import java.rmi.RemoteException;
import com.xx.service.ISayHello;

/**
 * 远程接口实现
 */
public class ChinaSayHello implements ISayHello {

	public String doSayHello(String name) throws RemoteException {
		return "您好," + name;
	}
}
import java.net.MalformedURLException;
import java.rmi.AlreadyBoundException;
import java.rmi.Naming;
import java.rmi.Remote;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.server.UnicastRemoteObject;

import com.xx.service.ISayHello;
import com.xx.service.impl.ChinaSayHello;

/**
 * 
 * 暴露远程服务
 */
public class ServerMain {
	
	public static void main(String[] args) {
		//创建远程对象
		ISayHello sayHello = new ChinaSayHello();
		//url
		String serviceUrl = "//localhost:9999/sayhello";
		//java 默认对口是1099
		final int registryPort = 9999;
		//暴露服务
		exporter(sayHello, registryPort, serviceUrl);
	}
	
	/**
	 * 暴露服务
	 * @param object
	 * @param registryPort
	 * @param serviceUrl
	 */
	public static void exporter(Remote object,int registryPort, String serviceUrl) {
		int servicePort = 0;
		try {
			UnicastRemoteObject.exportObject(object, servicePort);
			LocateRegistry.createRegistry(registryPort);
			Naming.bind(serviceUrl, object);
			System.out.println("绑定成功.");
		} catch (RemoteException e) {
			e.printStackTrace();
		} catch (MalformedURLException e) {
			e.printStackTrace();
		} catch (AlreadyBoundException e) {
			e.printStackTrace();
		}
	}
}


二:客户端  远程方法调用

import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;

import com.xx.service.ISayHello;

/**
 * 客户端
 */
public class ClientMain {
	
	public static void main(String[] args) throws RemoteException {
		// 查找远程对象 
		ISayHello sayHello= getObject(ISayHello.class, "rmi://localhost:9999/sayhello");
		// 远程方法调用
		System.out.println(sayHello.doSayHello("张三"));
	}
	
	public static <T> T getObject(Class<T> clazs, String serviceUrl) {
		try {
			Object object = Naming.lookup(serviceUrl);
			return clazs.cast(object);
		} catch (MalformedURLException e) {
			e.printStackTrace();
		} catch (RemoteException e) {
			e.printStackTrace();
		} catch (NotBoundException e) {
			e.printStackTrace();
		}
		throw new RuntimeException();
	}
}


 

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Java RMI远程方法调用

java中使用rmi进行远程方法调用

java中进行远程方法调用,能支持分布式计算。并且可以实现在server的修改,能反应到各个client。 假如server的ip是:192.168.11.2, server端的代码如下: /*...

Java远程方法调用(RMI)

Java远程方法调用(RMI) 关键字: java/java编程Java与.NET都提供了远程处理功能,但不完全相同.Java远程处理是通过一个“共享接口”实现的,而.NET可以通过一个“共享命令集...

RMI - Java远程方法调用

Java RMI 框架(远程方法调用)

Java RMI 框架(远程方法调用)  RMI(即Remote Method Invoke 远程方法调用)。在Java中,只要一个类extends了java.rmi.Rem...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)