我对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,它不会显示任何额外的开放端口。
两台服务器是不同的还是相同的?
您还没有运行客户端,所以'add()'方法没有运行,并且没有额外的连接。由于您已经将注册表作为单独的进程启动,因此它将使用远程对象中的不同端口。 – EJP
你的问题没有意义。在注册表无意义之前启动服务器。启动注册表和没有客户端的服务器不会告诉你有关连接的任何信息。陈述你的*真实*问题,如果有的话。 – EJP