【问题标题】:Passing argv from client to server using RMI使用 RMI 将 argv 从客户端传递到服务器
【发布时间】:2017-08-24 14:38:01
【问题描述】:

我第一次尝试使用 RMI,我对 java 了解不多,只是基础知识。 所以对于初学者来说,我想用 4 个基本算术运算(+ - * /)编写一个简单的计算器,在终端(linux)上执行时:

java CalculatorClient <host> 1 + 2

因此 argv[0] 是主机,我想将 argv[] 传递给服务器,以便它可以远程计算并返回值。

我确实得到了基本的工作,这段代码客户端只收到服务器被访问的次数:

    // CounterServerCaller.java
    import java.rmi.*;
    public class CounterServerCaller {
        public static void main(String args[])  {

        try {
            Counter c = new CounterServer();
            Naming.rebind("Counter", c);
            System.out.println("Counter ready.");
        }
        catch (Exception e) {
            System.out.println("Erro:"+e.getMessage());}
        }
    }

.

    // CounterServer.java
    import java.rmi.*;
    import java.rmi.server.*;

    public class CounterServer extends UnicastRemoteObject {
        private int value;
        public int nextValue() throws RemoteException {
            return value++;
        }
        public CounterServer() throws RemoteException {
            super();
            value = 0;
        }
    }

.

    // CounterCliente.java
    import java.rmi.*;
    public class CounterClient {
        public static void main(String args[]) {
            try {
                String host = args[0];
                Counter c = (Counter)
                    Naming.lookup("rmi://"+host+"/Contador");
                System.out.println("Contador: "+c.nextValue());
            } catch (Exception e) {
                System.out.println("Erro: "+e.getMessage());
            }
        }
    }

.

// Counter.java
import java.rmi.*;
public interface Counter extends Remote {
    int nextValue() throws RemoteException;
}

我确实搜索了一个答案,但我只能找到非常复杂的代码,我认为回调不是最简单的解决方案。也许我使用了错误的关键词进行搜索?请问有人能解释一下这个问题吗?

【问题讨论】:

  • 这里没有任何东西可以将argv 传递给服务器。

标签: java server client rmi argv


【解决方案1】:
public interface Counter extends Remote {
    int nextValue() throws RemoteException;
}

这个远程界面无论如何都不符合您的目标。我不明白你为什么发布它,甚至写它。

你需要的是这样的:

public interface Calculator extends Remote {
    public int evaluate(String expression) throws RemoteException;
}

如果您愿意,可以返回longdoubleBigDecimal,无论您需要什么。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 2015-04-05
    • 2010-12-31
    相关资源
    最近更新 更多