如何通过互联网调试RMI / IIOP?

时间:2012-04-04 09:52:15

标签: java networking rmi iiop

我有一个客户端/服务器应用程序,通过JNDI / RMI / IIOP在客户端使用一些Glassfish客户端代码(未打包为Glassfish客户端)和服务器端使用Glassfish实例进行通信。

我有一些Glassfish多模式脚本,用于确保我在任何计算机上创建的域完全相同且配置正确。

在本地网络上使用该脚本,我已经确定可以从我的机器上的客户端代码访问远程Glassfish服务器实例(这是一个非常合理的猜测,但我倾向于测试所有我不完全确定的事情的)。

下一步是让客户端/服务器应用程序正常工作(我应该说“通过”)互联网:使用我公司局域网中的客户端代码(换句话说,在我的机器上)和我在Amazon VM上的服务器代码运行我的Glassfish服务器。出于某些原因,远程Glassfish正在Windows VM上运行。

显然(正如我问这个问题,你可以安全地猜测通过互联网测试是不行的。你是对的。

所以,为了得到更多的猜测,我在我的机器和服务器上都启动了SmartSniffer

在我的机器上,我只能看到一个TCP数据包进入该服务器实例(并且没有任何内容返回)。

在服务器实例上,我可以看到一个数据包进入(客户端查询)和一个数据包退出(服务器应答)。该服务器答案如下所示:

  

[4/4/2012 11:47:13 AM:917]   GIOP .......(................名称服务....._ is_a .................. .NEO ................ª.......(IDL:omg.org/SendingContext/CodeBase:1.0 ............ ñ........172.27.63.145.Ô2....¯«Ë........ë.................... .......   ...................   ...... ...........& ...............(IDL:omg.org/CosNaming/NamingContext:1.0。

172.27.63.145地址是我在本地网络中的IP。

  

[4/4/2012 11:47:13 AM:917]   GIOP ....... 2 ............ NEO ................ 0 .......(IDL:OMG .ORG / SendingContext /基本代码:1.0 ............ô........ 46.137.114 ###'5 ....‾«E ....。 .... d ...........................   ...................   ...... ...........& ...........!... | ............... $ .. 。   ... F ............ 10.241.42。###。“6。@ ........摹............. .G ........默认...................克............... + IDL:OMG .ORG / CosNaming名称/ NamingContextExt:1.0 .............¢........ 10.241.42.208.'5 ...,M«E ....   ...... d ... S1AS-ORB ............ RootPOA ....   TNameService ............................... .................. 。   ...... ...........& ......

那是46.137.114。###是我的亚马逊VM的外部之一,而且是10.241.42。###是它在亚马逊神奇虚拟服务器中的内部IP。

所以似乎服务器正在回答,不是吗?

但是这个答案永远不会在我的网络中找到我的机器。

那么......我该如何查看丢失的地方?似乎像打包嗅探器已经完成了它的工作,但我现在能做什么呢?

注意这个问题是对"How to Connect a glassfish client to glassfish server over NATs?"

的澄清

1 个答案:

答案 0 :(得分:0)

也许是个愚蠢的问题,但您的Amazon EC2实例是否配置了所有必需的端口,以使您的通信协议正常工作?您可以在EC2->安全组下的AWS控制台中看到您的实例分配的安全组中配置的开放端口。