小弟需要了解RMI的详细远程调用机制?有例子最好。
望 路过的,走过的帮帮忙。
望 路过的,走过的帮帮忙。
解决方案 »
- hibernate中查询结果和数据库不一致
- 一个关于JPanel的小问题
- 求解决方法!!!谢谢
- 控件
- log4j 我在log配置文件,提示SetFile错误。
- JAVA小问题,高手解答一下!
- 向大家请教一个数据结构算法问题!!
- 关于eclipse里调试的问题!
- swing 打包jar后无法显示图片
- 她们的区别:ResultSetMetaData.getColumnName(i)&ResultSetMetaData.getColumnLabel(i)
- 有那个好心人给我发struts+spring+hibernate 和struts+hibernate项目?
- ConcurrentModificationException问题?
如果你要了解的清楚,请查看http://java.sun.com/developer/onlineTraining/rmi/RMI.html#IntroRMI
希望能给你有帮助.
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.UnicastRemoteObject;public class AddServerImpl
{
public AddServerImpl()
{
}
public static void main(String args[])
{
System.setSecurityManager(new RMISecurityManager());
try
{
Data data=new Data();
Naming.rebind("AddData",data);
System.out.println("Server Registered");
}
catch(Exception e)
{
System.out.println(e.toString());
}
}
}class Data extends UnicastRemoteObject implements AddServer
{
public Data() throws RemoteException
{
super();
}
public int addData(int a,int b)
{
return a+b;
}
}3.调用远程方法:import java.rmi.*;
import java.rmi.server.*;
import java.io.*;public class AddServerClient
{
public static void main(String args[])
{
String readString,readString1;
int num1,num2;
InputStreamReader inputReader=new InputStreamReader(System.in);
BufferedReader bufferStream=new BufferedReader(inputReader);
try
{
System.out.println("Please enter first number : ");
System.out.flush();
readString=bufferStream.readLine();
num1=Integer.parseInt(readString);
System.out.println("Please enter second number : ");
System.out.flush();
readString1=bufferStream.readLine();
num2=Integer.parseInt(readString1);
AddServer server=(AddServer)Naming.lookup("AddData");
int res=server.addData(num1,num2);
System.out.println("Result is" +res);
}
catch(Exception e)
{
System.out.println(e.toString());
}
}
}4.调试方法:
先编译所有的java文件 javac *.java
rmic AddServerImpl 生成Stub和Skeleton
(注意文件权限的问题,安全策略)
启动远程对象注册:start rmiregistry
启动服务器:java AddServerImpl
启动客户:java AddServerClient
客户端首先获得服务端对象的引用,将其要调用的方法和参数打包,通过网络传送给服务端(所以需要序列化对象)。服务端解析参数,调用方法,将结果打包,返回给客户端。
所以我们看到的客户端好像是在本机调用方法一样!