直接上代码
server包的类列表
HelloImpl
HelloLL
MainS
client包的类列表
HelloWorld
MainC
package server;
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface HelloImpl extends Remote{
public void sayHello() throws RemoteException;
}
定义一个实现Remote的接口,接口中写出客户端要需要的待实现的方法列表
package server;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
public class HelloLL extends UnicastRemoteObject implements HelloImpl{
protected HelloLL() throws RemoteException {
super();
// TODO Auto-generated constructor stub
}
@Override
public void sayHello() throws RemoteException {
// TODO Auto-generated method stub
System.out.println("Hello World!");
}
}
定义一个继承UnicastRemoteObject实现了HelloImpl的类,然后必须要有构造函数,因为需要抛出RemoteException,然后override HelloImpl接口中的方法。
package server;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
public class MainS {
protected MainS() throws RemoteException {
super();
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
try{
HelloImpl server = new HelloLL();
LocateRegistry.createRegistry(8888);
Naming.bind("rmi://localhost:8888/server", server);
}catch(Exception ex){
ex.printStackTrace();
}
}
}
//main方法中的代码差不多是一样的= =、不算太大理解。
package client;
import java.rmi.Naming;
import java.rmi.RemoteException;
import server.HelloImpl;
public class HelloWorld {
HelloImpl helloImpl;
public HelloWorld(){
try{
helloImpl=(HelloImpl)Naming.lookup("rmi://localhost:8888/server");
}catch(Exception ex){
ex.printStackTrace();
}
}
public void sayHello() {
try {
helloImpl.sayHello();
} catch (RemoteException e) {
// TODO: handle exception
e.printStackTrace();
}
}
}
//在客户端调用服务器上的代码。
package client;
public class Main1 {
public static void main(String[]args){
HelloWorld helloWorld = new HelloWorld();
helloWorld.sayHello();
}
}