Java RMI和netstat输出

我试图让我的RMI服务跨防火墙工作。 我遵循这个答案中的指示,在端口1099上运行RMIregistry和我的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(service,1099);

registry = LocateRegistry.createRegistry(1099);

registry.rebind(IRemoteService.serviceName,stub);

这是预期的吗? 为什么我看到港口#像33400,33378等? 或者,我对源端口和目的端口的工作原理是否有误? 我希望看到所有的连接(registry查询和远程服务调用)只能进入端口1099。

注意:我没有在防火墙环境中运行以上,只是在我的实验室本地尝试,然后尝试在防火墙的情况下。

Solutions Collecting From Web of "Java RMI和netstat输出"

 tcp6 0 0 10.1.1.1:1099 10.1.1.2:33400 ESTABLISHED 

33400端口上的客户端和1099端口上的服务器之间的连接。你不能单单从这一行中得知,但是你提到了使用1099的RMI,并且在1099 LISTENING之前会有一个前面的行。

 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。