2016-11-24 87 views
1

我对RMI的印象就好像它们是不同的服务器一样。我写的接口为:RMI注册表和RMI服务器是否有不同的端口号?

package pack; 
import java.rmi.*; 

public interface AddI extends Remote 
{ 
     public int add(int x, int y) throws Exception; 
} 

的类,它的对象送达如下:

package pack; 
import java.rmi.server.*; 
public class AddC extends UnicastRemoteObject implements AddI 
{ 
     public AddC() throws Exception 
     { 
       super(); 
     } 
     public int add(int x, int y) 
     { 
       int i = 2; 
       while(i>0); 
       return x+y; 
     } 
} 

我想要的add()以上的类的方法,而循环卡住英寸

我写一个服务器程序为:

package pack; 
import java.rmi.*; 
public class Server 
{ 
     public static void main(String[] args) throws Exception 
     { 
       AddC obj = new AddC(); 
       Naming.rebind("rmi://10.100.11.238:1099/ADD", obj); 
       System.out.println("Server Started"); 
     } 
} 

然后客户端程序:

package pack; 
import java.rmi.*; 
public class Client 
{ 
     public static void main(String[] args) throws Exception 
     { 
       AddI obj = (AddI)Naming.lookup("rmi://10.100.11.238:1099/ADD"); 
       int n = obj.add(5, 4); 
       System.out.println(n); 
     } 
} 

我在端口1099启动rmiregistry中和运行NMAP命令:

$ nmap 127.0.0.1 

Starting Nmap 7.01 (https://nmap.org) at 2016-11-24 15:14 IST 
Nmap scan report for localhost (127.0.0.1) 
Host is up (0.00011s latency). 
Not shown: 997 closed ports 
PORT  STATE SERVICE 
21/tcp open ftp 
80/tcp open http 
1099/tcp open rmiregistry 

我已经在我的系统中运行一个Web服务器。然后我运行的服务器程序:

$java pack.Server 

再经过我在不同的机器上运行的客户端为:

$java pack.Client 

由于add()方法一直停留在while循环使RMI服务器还没有完成。如果我再次运行nmap,它不会显示任何额外的开放端口。

两台服务器是不同的还是相同的?

+0

您还没有运行客户端,所以'add()'方法没有运行,并且没有额外的连接。由于您已经将注册表作为单独的进程启动,因此它将使用远程对象中的不同端口。 – EJP

+0

你的问题没有意义。在注册表无意义之前启动服务器。启动注册表和没有客户端的服务器不会告诉你有关连接的任何信息。陈述你的*真实*问题,如果有的话。 – EJP

回答

0

RMI被设计成由SUN服务器端的分布式系统,这意味着你可以有一个rmiregistry运行作为一个独立的过程,不同的服务器可以将他们的RMI服务将其注册和客户端可以找到从rmiregistry所需的服务(如电话交换机)。

产品用途表明,rmiregistry过程中,只有一个服务器进程主要用于在同一台机器上,所以rmiregistry和服务器进程可以在服务器进程调用LocateRegistry.createRegistry(<your registry port>);被合并到同一个过程。

由于设计RMI打开2个端口,1个(集成)rmiregistry和1个服务器。