如何在 java rmi 编码中管理多个本地方法
How to manage multiple local methods in java rmi coding
当我进行 RMI 编码时,我遵循以下步骤
- 首先创建一个远程接口。
- 然后在远程实现接口class。
- 然后实现一个服务器class程序。
- 然后实现客户端class程序。
- 然后编译运行
现在我正在尝试做:
- 首先创建一个远程接口。
- 然后在多个远程实现接口class。
- 然后实现一个服务器class程序。
- 然后实现客户端class程序。
我已经完成了前两个步骤,但不知道如何执行第 3 步和第 4 步,因为我不知道如何管理多个远程 classes。
我的代码如下:
- 界面
Calculator.java
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface Calculator extends Remote
{
public int sum(int x,int y) throws RemoteException;
}
- 本地 classes
Addition.java
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
public class Addition extends UnicastRemoteObject implements Calculator
{
public Addition() throws RemoteException
{
super();
}
public int sum(int x,int y) throws RemoteException
{
return x+y;
}
}
Subtraction.java
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
public class Subtraction extends UnicastRemoteObject implements Calculator
{
public Subtraction() throws RemoteException
{
super();
}
public int sum(int x,int y) throws RemoteException
{
return x-y;
}
}
现在我正在尝试为多个本地 class 实施服务器 class。但我不知道,如何使用服务器与那些多个本地 class 进行通信,这就是我被卡住的原因。
所以,我几乎不需要帮助。
- 在您的界面代码中:您拼错了界面本身的名称。
- 注意远程方法 sum 的名称,我在回答中将其更改为 'calculate',以使其更相关。 (你已经使用方法'sum'同时做了加减法)
- 您已经创建了接口的多个实现。目前还不清楚,你 'want to do' 接下来和他们一起做什么。
- 假设您想要创建一个服务器-客户端模型,其中您有一个接口的多个实现并且您想要调用其中任何一个,您可以为每个实现设置一个服务器:
Interface (Filename: Calculator.java)
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface Calculator extends Remote{
//remote method declaration
public int calculate(int x,int y) throws RemoteException;
}
Implementation 1 of interface: Calculator (Filename: Addition.java)
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
public class Addition extends UnicastRemoteObject implements Calculator{
public Addition() throws RemoteException{
super();
}
public int calculate(int x,int y) throws RemoteException{
//define what your remote method will do
return x+y;
}
}
Implementation 2 of interface: Calculator (Filename: Subtraction.java)
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
public class Subtraction extends UnicastRemoteObject implements Calculator{
public Subtraction() throws RemoteException{
super();
}
public int calculate(int x,int y) throws RemoteException{
return x-y;
}
}
Server code for Addition class (Filename: ADDserver.java)
import java.rmi.*;
import java.rmi.server.*;
import java.rmi.registry.Registry;
import java.rmi.registry.LocateRegistry;
import java.net.*;
import java.io.*;
public class ADDserver {
public static void main(String args[]) {
try{
//take input the port number
InputStreamReader is = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(is);
String portname, registryURL;
System.out.println("Enter port:");
String portNum = (br.readLine()).trim();
//create remote object
Addition exportedObj = new Addition();
//generate registry url for rmi registry server
registryURL = "rmi://localhost:" + portNum + "/Add";
//assosiate your object with the url in rmiregistry
Naming.rebind(registryURL, exportedObj);
System.out.println("ADDserver ready");
} catch (Exception re){
System.out.println("Exception in ADDserver: " + re);
}
}
}
Server code for Subtraction class (Filename: SUBserver.java)
import java.rmi.*;
import java.rmi.server.*;
import java.rmi.registry.Registry;
import java.rmi.registry.LocateRegistry;
import java.net.*;
import java.io.*;
public class SUBserver {
public static void main(String args[]) {
try{
InputStreamReader is = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(is);
String portname, registryURL;
System.out.println("Enter port:");
String portNum = (br.readLine()).trim();
Subtraction exportedObj = new Subtraction();
registryURL = "rmi://localhost:" + portNum + "/Subtract";
Naming.rebind(registryURL, exportedObj);
System.out.println("SUBserver ready");
} catch (Exception re){
System.out.println("Exception in SUBserver: " + re);
}
}
}
当我进行 RMI 编码时,我遵循以下步骤
- 首先创建一个远程接口。
- 然后在远程实现接口class。
- 然后实现一个服务器class程序。
- 然后实现客户端class程序。
- 然后编译运行
现在我正在尝试做:
- 首先创建一个远程接口。
- 然后在多个远程实现接口class。
- 然后实现一个服务器class程序。
- 然后实现客户端class程序。
我已经完成了前两个步骤,但不知道如何执行第 3 步和第 4 步,因为我不知道如何管理多个远程 classes。
我的代码如下:
- 界面
Calculator.java
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface Calculator extends Remote
{
public int sum(int x,int y) throws RemoteException;
}
- 本地 classes
Addition.java
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
public class Addition extends UnicastRemoteObject implements Calculator
{
public Addition() throws RemoteException
{
super();
}
public int sum(int x,int y) throws RemoteException
{
return x+y;
}
}
Subtraction.java
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
public class Subtraction extends UnicastRemoteObject implements Calculator
{
public Subtraction() throws RemoteException
{
super();
}
public int sum(int x,int y) throws RemoteException
{
return x-y;
}
}
现在我正在尝试为多个本地 class 实施服务器 class。但我不知道,如何使用服务器与那些多个本地 class 进行通信,这就是我被卡住的原因。
所以,我几乎不需要帮助。
- 在您的界面代码中:您拼错了界面本身的名称。
- 注意远程方法 sum 的名称,我在回答中将其更改为 'calculate',以使其更相关。 (你已经使用方法'sum'同时做了加减法)
- 您已经创建了接口的多个实现。目前还不清楚,你 'want to do' 接下来和他们一起做什么。
- 假设您想要创建一个服务器-客户端模型,其中您有一个接口的多个实现并且您想要调用其中任何一个,您可以为每个实现设置一个服务器:
Interface (Filename: Calculator.java)
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface Calculator extends Remote{
//remote method declaration
public int calculate(int x,int y) throws RemoteException;
}
Implementation 1 of interface: Calculator (Filename: Addition.java)
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
public class Addition extends UnicastRemoteObject implements Calculator{
public Addition() throws RemoteException{
super();
}
public int calculate(int x,int y) throws RemoteException{
//define what your remote method will do
return x+y;
}
}
Implementation 2 of interface: Calculator (Filename: Subtraction.java)
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
public class Subtraction extends UnicastRemoteObject implements Calculator{
public Subtraction() throws RemoteException{
super();
}
public int calculate(int x,int y) throws RemoteException{
return x-y;
}
}
Server code for Addition class (Filename: ADDserver.java)
import java.rmi.*;
import java.rmi.server.*;
import java.rmi.registry.Registry;
import java.rmi.registry.LocateRegistry;
import java.net.*;
import java.io.*;
public class ADDserver {
public static void main(String args[]) {
try{
//take input the port number
InputStreamReader is = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(is);
String portname, registryURL;
System.out.println("Enter port:");
String portNum = (br.readLine()).trim();
//create remote object
Addition exportedObj = new Addition();
//generate registry url for rmi registry server
registryURL = "rmi://localhost:" + portNum + "/Add";
//assosiate your object with the url in rmiregistry
Naming.rebind(registryURL, exportedObj);
System.out.println("ADDserver ready");
} catch (Exception re){
System.out.println("Exception in ADDserver: " + re);
}
}
}
Server code for Subtraction class (Filename: SUBserver.java)
import java.rmi.*;
import java.rmi.server.*;
import java.rmi.registry.Registry;
import java.rmi.registry.LocateRegistry;
import java.net.*;
import java.io.*;
public class SUBserver {
public static void main(String args[]) {
try{
InputStreamReader is = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(is);
String portname, registryURL;
System.out.println("Enter port:");
String portNum = (br.readLine()).trim();
Subtraction exportedObj = new Subtraction();
registryURL = "rmi://localhost:" + portNum + "/Subtract";
Naming.rebind(registryURL, exportedObj);
System.out.println("SUBserver ready");
} catch (Exception re){
System.out.println("Exception in SUBserver: " + re);
}
}
}