使用RMI将argv从客户端传递到服务器

时间:2017-03-30 15:11:30

标签: java server client rmi argv

我第一次尝试使用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;
}

我确实在搜索答案,但我只能找到非常复杂的代码,使用CallBacks,我认为这不是最简单的解决方案。也许我在用错误的关键词搜索?任何人都能对这件事有所了解吗?

1 个答案:

答案 0 :(得分:0)

public interface Counter extends Remote {
    int nextValue() throws RemoteException;
}

此远程界面无论如何都无法满足您的目标。我不明白你为什么发布它,甚至写它。

您需要的是:

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

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