我第一次尝试使用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,我认为这不是最简单的解决方案。也许我在用错误的关键词搜索?任何人都能对这件事有所了解吗?
答案 0 :(得分:0)
public interface Counter extends Remote {
int nextValue() throws RemoteException;
}
此远程界面无论如何都无法满足您的目标。我不明白你为什么发布它,甚至写它。
您需要的是:
public interface Calculator extends Remote {
public int evaluate(String expression) throws RemoteException;
}
如果您愿意,可以让它返回long
或double
或BigDecimal
,无论您需要什么。