【问题标题】:Client, server and rmi don't work客户端、服务器和 rmi 不起作用
【发布时间】:2012-11-11 04:17:17
【问题描述】:

此代码不起作用。好吧,它有效,但客户端不打印。难道我做错了什么?我正在使用 W7 和 NetBeans。有没有办法查看 rmiregistry 是否正常?如果我删除这些捕获,我无法编译它。我很确定问题来自重新绑定和查找。

ServerNew.java:

    interface C extends Remote
    {
        public String now() throws RemoteException ;
    }

    class Server extends UnicastRemoteObject implements C
    {    
        public String now() throws RemoteException 
        {
            return "99:99";
        }

        Server() throws RemoteException 
        {

        }

    }

    public class ServerNew
{
    public static void main(String[] args) throws Exception
    {
        Server server=new Server();
        System.setSecurityManager(new java.rmi.RMISecurityManager());
        LocateRegistry.createRegistry(1099);
        Naming.rebind("rmi://localhost:1099/time", server);
    }
}

ClientNew.java:

        interface C extends Remote
    {
        public String now() throws RemoteException ;
    }

    public class ClientNew
{
    public static void main(String[] args) throws Exception
    {
        C server=(C) Naming.lookup("rmi://localhost:1099/time");
        String text=server.now();
        System.out.println(text);
    }
}

服务器的输出(ServerNew.java:38Naming.rebind):

    Exception in thread "main" java.security.AccessControlException: access denied ("java.net.SocketPermission" "127.0.0.1:1099" "connect,resolve")
    at java.security.AccessControlContext.checkPermission(AccessControlContext.java:366)
    at java.security.AccessController.checkPermission(AccessController.java:555)
    at java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
    at java.lang.SecurityManager.checkConnect(SecurityManager.java:1051)
    at java.net.Socket.connect(Socket.java:574)
    at java.net.Socket.connect(Socket.java:528)
    at java.net.Socket.<init>(Socket.java:425)
    at java.net.Socket.<init>(Socket.java:208)
    at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(RMIDirectSocketFactory.java:40)
    at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(RMIMasterSocketFactory.java:146)
    at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:613)
    at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:216)
    at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:202)
    at sun.rmi.server.UnicastRef.newCall(UnicastRef.java:340)
    at sun.rmi.registry.RegistryImpl_Stub.rebind(Unknown Source)
    at java.rmi.Naming.rebind(Naming.java:177)
    at servernew.ServerNew.main(ServerNew.java:38)
Exception in thread "RMI TCP Connection(idle)" java.security.AccessControlException: access denied ("java.net.SocketPermission" "127.0.0.1:61881" "accept,resolve")
    at java.security.AccessControlContext.checkPermission(AccessControlContext.java:366)
    at java.security.AccessController.checkPermission(AccessController.java:555)
    at java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
    at java.lang.SecurityManager.checkAccept(SecurityManager.java:1174)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.checkAcceptPermission(TCPTransport.java:654)
    at sun.rmi.transport.tcp.TCPTransport.checkAcceptPermission(TCPTransport.java:293)
    at sun.rmi.transport.Transport$1.run(Transport.java:176)
    at sun.rmi.transport.Transport$1.run(Transport.java:174)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.rmi.transport.Transport.serviceCall(Transport.java:173)
    at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:553)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:808)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:667)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
    at java.lang.Thread.run(Thread.java:722)

【问题讨论】:

    标签: java client rmi rmiregistry


    【解决方案1】:

    通过这种异常处理,任何人都无法回答您的问题。我建议您修复它并提供正在引发的异常。到目前为止,您发布的内容完全没有意义,不应该写出来。

    【讨论】:

    • @AsAs 那么异常的哪一部分你不明白?
    • 好吧,我昨天才开始这个话题,所以我不知道如何解决。
    • @AsAs 当您开始时,该主题实际上并不是我问题的答案。您在 SecurityManager 下运行(为什么?)并且您有一个 AccessControlException 表示您没有在 .policy 文件中授予自己特定权限。所以要么这样做,要么删除 SecurityManager。
    • 好吧,如果我删除 SecurityManager,服务器可以工作,但现在客户端说:Exception in thread "main" java.rmi.UnmarshalException: error unmarshalling return; nested exception is: java.lang.ClassNotFoundException: servernew.C (no security manager: RMI class loader disabled)
    • @AsAs 所以你需要将该类部署到客户端。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-31
    相关资源
    最近更新 更多