5部分组成:
1.IStudent接口
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface IStudent extends Remote{
public String show(String str)throws RemoteException;
}
2.Student实现类
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
public class StudentImpl extends UnicastRemoteObject implements IStudent {
public StudentImpl()throws RemoteException{
System.out.println("IStudent");
}
public String show(String str) throws RemoteException {
System.out.println(str);
return str;
}
}
3.服务器端
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.RemoteException;
public class Server {
public static void main(String[] args) {
try {
StudentImpl studentImpl = new StudentImpl();
Naming.rebind("rmi://192.168.1.36:1099/studentimpl",studentImpl);
System.out.println("server bind success");
} catch (Exception e) {
e.printStackTrace();
}
}
}
4.客户端
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.Remote;
import java.rmi.RemoteException;
public class Client {
public static void main(String[] args) {
try {
IStudent iStudent = (IStudent)Naming.lookup("studentimpl");//最后运行客户端时,这里报异常无法找到"代理类"
System.out.println(((IStudent) iStudent).show("hello world"));
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (RemoteException e) {
e.printStackTrace();
} catch (NotBoundException e) {
e.printStackTrace();
}
}
}
5.IStudent接口的IStudent_stub.class 和 IStudent_skleon.class
还有个策略文件rmi.policy
grant
{
permission java.net.SocketPermission "*:1024-65535","connect";
};
运行:
start rmiregistry 运行成功
java server 运行成功
java client 报异常如下:
Exception in thread "main" java.lang.ClassCastException: $Proxy0
at client.Client.main(Client.java:17)
在线等!~~~~~~~
------解决方案--------------------
没实现接口
------解决方案--------------------
可能是你Server端的IStudent的包名和Client端的包名不一致,包名要完全一样