蓝森林首页 | 返回主页 | 本站地图 | 站内搜索 | 联系信箱 |
 您目前的位置:首页 > 自由软件 > 技术交流 > 应用编程


    

蓝森林 http://www.lslnet.com 2006年6月6日 10:18


!!请教一个RMI的小问题!!

刚开始就不行了,所有代码如下:
import java.rmi.Remote;
import java.rmi.RemoteException;

public interface RMIIntf extends java.rmi.Remote
  {public String tt()throws java.rmi.RemoteException;
  }

import java.rmi.*;
import java.rmi.server.UnicastRemoteObject;

public class RMIImlp extends UnicastRemoteObject implements RMIIntf
  {public RMIImlp()throws RemoteException{}
   public String tt()
     {System.out.println("服务器收到一条信息");
      return "这是返回信息,请收取!";
     }
  }


import java.rmi.*;
import java.rmi.server.*;

public class RMIServer
  {public static void main(String args[])
     {if(System.getSecurityManager()==null)
        {System.setSecurityManager(new RMISecurityManager());
        }
      try
        {RMIImlp remoteObj=new RMIImlp();
         Naming.rebind("//127.0.0.1/text",remoteObj);
        }
      catch(Exception e)
        {System.err.println("hhh"+e);
        }
     }
  }


import java.rmi.*;
import java.math.*;

public class RMIClient
  {public static void main(String args[])
     {if(System.getSecurityManager()==null)
        {System.setSecurityManager(new RMISecurityManager());
        }
      try
        {Object aa=Naming.lookup("RMI://127.0.0.1/text");
         RMIIntf xx=(RMIIntf)aa;
         String s=xx.tt();
         System.out.println(s);
        }
      catch(Exception e)
        {System.err.println("jjjjjjjjjj");
        }
     }
  }


抛出如下异常,请问是什么原因,多位请帮帮忙,多谢了!

要么你没仔细看书,要么你看的那本书是抄别人的,把这个重要的安全问题忽略了。RMI需要强安全措施,所以使用了SecurityManager,相对应的,你也应给配置一个policy文件给服务器,让它打向客户端开放相应的权限,如果不开放权限,你就会得到这个错误。java提供了一个policytool程序,可以帮助你创建poilcy文件,具体的例子可以去网上搜索以下。

[list]
[list=1]
[*]The RMI tutorial (by Sun): http://java.sun.com/docs/books/tutorial/rmi/
[*]Fundamentals of RMI Course (by jGuru): http://developer.java.sun.com/developer/onlineTraining/rmi/
[/list]

如同版主所说的, 你需要在policy文件中制定socket permission
grant{
    ....   
    permission java.net.SocketPermission "*:1024-65535", "connect,accept";
    .....
}

并且还有你的FilePermission.


也可以根据http://www.hta-bi.bfh.ch/Projects/jass/docbkx_html/rmi.html
上面说的, 装一个eclipse的插件, 来做RMI

多谢大家的热心帮助,policy文件我是有的,上次我问老师他跟我说那个policy文件里的东西只是些配制信息,可有可无,不过当时他也没给解决到问题。我是完全按书上说的做的。



Copyright © 1999-2000 LSLNET.COM. All rights reserved. 蓝森林网站 版权所有。 E-mail : webmaster@lslnet.com