作者NightPrince (shooting star)
看板java
标题Re: [问题] RMI
时间Sat Mar 18 16:31:29 2006
※ 引述《PsMonkey (痞子军团团长)》之铭言:
: ==站内信件==
: ※ 引述《NightPrince (shooting star)》之铭言:
: : 问题已经被我神奇的解决掉,打扰各位真不好意思 (光速逃)
: : XD
: : [local save]
: 1. 既然你都已经 po 两篇了
: 何不顺便把你怎麽解决的,也一起 po 一下
: 2. 你的 local save 好像还是转信出去耶??
: 所以,赏你一个小小警告 XDXD
: (不能欺骗大家阿...)
既然版主都这样说,我就只好野人献曝一下,顺便赚点P币 XD
一般而言,要使用RMI的话,也就是要使用远端的方法
所以要先定义 remote interface ,而在该 interface里面
定义 remote methods 提供给远端之用
所以一般的作法是先写一个 Interface
去继承 Remote , sample code:
public interface TempServer extends Remote
{
public ObjectName getRemoteObject() throws RemoteException;
}
之後再写一个类别实作该 interface
并且顺便注册本身此类别为远端物件, sample code:
public class TempServerImpl extends UnicastRemoteObject implements TempServer
{
.
.
.
public TempServerImpl() throws RemoteException
{
// 因为UnicastRemoteObject建构子会丢出 RemoteException
// 所以子类别就要顺便接住
}
public ObjectName getRemoteObject()
{
return ObjectName;
}
public void Main(String args[]) throws Exception
{
TempServerImpl temp = new TempServerImpl();
String serverObjectName = "rmi://localhost/serverObject";
LocateRegistry.createRegistry(1099); //启动registry server
Naming.rebind(serverObjectName, temp); // 注册该物件为 remote
}
}
client sample code:
public class ClientGetRemoteObject
{
.
.
.
public void Main(String args[])
{
String remoteObject = "rmi://140.116.96.181/serverobject";
try
{
TempSever remoteServer = (TempServer) Naming.lookup(remoteObject);
ObjectName remoteServerObject = remoteServer.getRemoteObject;
}
catch(ConnectException ce_
{
ce.printStackTrace();
}
catch(Exception ex)
{
ex.printStackTrack();
}
}
}
用法差不多是这样,而我刚的问题是在 server 以及 client 端
的 rmi:// 那边,都输入 blue.iim.ncku.edu.tw ,这当然会有错
因为要注册成为远端物件,该物件一定是在 server 端嘛
所以 server 端那边的 rmi:// 只要输入 localhost 就好 XD
非常不应该的错误 [逃]
其实还有很多细节我没说,去看 API 就知道了 [远目]
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.116.96.181