我正试图让我的rmi服务跨防火墙工作。我按照this answer中的说明在端口1099上运行rmi注册表和rmi服务,但是,当我执行netstat时,我看到rmi客户机和服务器上打开了不同的端口号。

[user@machine] ~ $ netstat -ant | grep 1099
tcp6       0      0 :::1099                 :::*                    LISTEN
tcp6       0      0 10.1.1.1:1099         10.1.1.2:33400        ESTABLISHED
tcp6       0      0 10.1.1.1:1099         10.1.1.1:33378        ESTABLISHED
tcp6       0      0 10.1.1.1:33408        10.1.1.1:1099         ESTABLISHED
tcp6       0      0 10.1.1.1:1099         10.1.1.1:33408        ESTABLISHED
tcp6       0      0 10.1.1.1:46866        10.1.1.2:1099         ESTABLISHED
tcp6       0      0 10.1.1.1:1099         10.1.1.2:33404        ESTABLISHED
tcp6       0      0 10.1.1.1:33378        10.1.1.1:1099         ESTABLISHED
tcp6       0      0 10.1.1.1:46862        10.1.1.2:1099         ESTABLISHED
tcp6       0      0 10.1.1.1:46864        10.1.1.2:1099         ESTABLISHED
tcp6       0      0 10.1.1.1:1099         10.1.1.2:33402        ESTABLISHED
tcp6       0      0 10.1.1.1:46860        10.1.1.2:1099         ESTABLISHED

10.1.1.1和10.1.1.2都是rmi服务器和客户机相互通信。
这是我的代码片段:
IRemoteService存根=(IRemoteService)
unicastremoteobject.exportobject(服务,1099);
registry=locateregistry.createregistry(1099);
registry.rebind(iremoteservice.servicename,存根);
这是预期的吗?为什么我看到港口像33400,33378等?或者我对源端口和目标端口工作方式的理解有误吗?我希望看到所有连接(注册表查找和远程服务调用)只转到端口1099。
注意:我还没有在防火墙环境中运行上面的程序,只是在防火墙环境中尝试之前在实验室本地运行。

最佳答案

tcp6       0      0 10.1.1.1:1099         10.1.1.2:33400        ESTABLISHED

端口33400上的客户端和端口1099上的服务器之间的连接。你不能仅从这一行就看出这一点,但你提到了使用1099的rmi,而且之前有一行使用1099监听。
tcp6       0      0 10.1.1.1:1099         10.1.1.1:33378        ESTABLISHED

端口33378上的客户端和端口1099上的服务器之间的连接。同上。
tcp6       0      0 10.1.1.1:33408        10.1.1.1:1099         ESTABLISHED

端口33408上的客户端和端口1099上的服务器之间的连接。同上。如果客户机位于不同的主机上,则此行将仅显示在客户机主机上。
tcp6       0      0 10.1.1.1:1099         10.1.1.1:33408        ESTABLISHED

连接的另一边。这一行只在服务器主机上显示。
tcp6       0      0 10.1.1.1:46866        10.1.1.2:1099         ESTABLISHED
tcp6       0      0 10.1.1.1:1099         10.1.1.2:33404        ESTABLISHED
tcp6       0      0 10.1.1.1:33378        10.1.1.1:1099         ESTABLISHED
tcp6       0      0 10.1.1.1:46862        10.1.1.2:1099         ESTABLISHED
tcp6       0      0 10.1.1.1:46864        10.1.1.2:1099         ESTABLISHED
tcp6       0      0 10.1.1.1:1099         10.1.1.2:33402        ESTABLISHED
tcp6       0      0 10.1.1.1:46860        10.1.1.2:1099         ESTABLISHED

等等。
这是预期的吗?
对。
为什么我看到港口像33400,33378等?
因为连接有两个端:服务器端和客户机端,客户机端口通常是随机选择的。
或者我对源端口和目标端口工作方式的理解有误吗?我希望看到所有连接(注册表查找和远程服务调用)只转到端口1099。
他们是。但是这些连接有客户端。
这实际上是一个关于tcp和netstat的问题,而不是rmi或java。

09-07 08:57