前言
在Java实验课上碰到一个题目要求写一个Java RMI 应用,打码是不难写,就是eclipse上运行跟命令行编译总是各种蜜汁错误~在此给大家填坑。
题目
首先在启动rmiregistry之前先为接口实例生成Stub类,java8会有下面的警告(毕竟过时了的东西嘛),看了下还是可以生成Stub类就无妨。
然后启动registry服务之后再运行Server。
否则如下:(开启不成功也会)
然后还有。。。服务连接不上开启客户端就会如此
最可怕的还是找不到类的坑,,,,两节课基本都卡在那里,,,,
图现在是截不到了,,,反正老师ppt里的代码跟ppt里面的链接那个教程按步骤打的代码均 无法运行(心里一万个xxx)
(想着反正以后再也不会写这玩意了!)
最后上图!
需求完成,赶快撤退~
代码
接口
import java.rmi.*;
public interface PCinfo extends Remote{
public String showInfo() throws RemoteException;
}
接口实例
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.util.Properties;
public class Info extends UnicastRemoteObject implements PCinfo{
/**
*
*/
private static final long serialVersionUID = -8178091323074177041L;
public Info() throws RemoteException {
super();
}
public String showInfo() throws RemoteException {
InetAddress addr = null;
try {
addr = InetAddress.getLocalHost();
} catch (UnknownHostException e) {
e.printStackTrace();
}
String hostName=addr.getHostName().toString();
Properties sysProperty = System.getProperties();
String systemName = sysProperty.getProperty("os.name");
return "Server Env: OS of " + hostName + " is " + systemName;
}
}
服务端:
import java.rmi.Naming;
public class InfoServer {
public static void main(String[] args){
try{
Info i = new Info();
Naming.bind("rmi://localhost:12312/Info", i);
System.out.println("InfoServer bound in register");
}catch(Exception e){
System.out.println("InfoServer err: "+e.getMessage());
e.printStackTrace();
}
}
}
客户端:
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
public class InfoClient {
public static void main(String[] args) {
try {
PCinfo h = (PCinfo)Naming.lookup("rmi://localhost:12312/Info");
System.out.println(h.showInfo());
} catch (MalformedURLException e) {
System.out.println("url格式异常");
} catch (RemoteException e) {
System.out.println("创建对象异常");
e.printStackTrace();
} catch (NotBoundException e) {
System.out.println("对象未绑定");
}
}
}
policy文件我就不放了,这个东西在我电脑是用不了的,,,一直报错找不到类-Djava.security.policy,网上也查了挺多,无解。建议就是不要用他23333