RMI Registry和RMI Server是否有不同的端口号?

时间:2016-11-24 11:19:06

标签: java rmi rmiregistry

我对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()方法陷入while循环。

我将服务器程序编写为:

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 个答案:

没有答案