我對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