我有一个客户端/服务器应用程序,它通过 JNDI/RMI/IIOP 在客户端使用一些 Glassfish 客户端代码(未打包为 Glassfish 客户端)和在服务器端使用 Glassfish 实例进行通信。
我有一些 Glassfish 多模式脚本,用于确保我在任何机器上创建的域完全相同且配置正确。
在本地网络上使用该脚本,我已经确保我可以从我机器上的客户端代码访问远程 Glassfish 服务器实例(这是一个非常合理的猜测,但是我倾向于测试所有我不完全确定的东西)。
下一步是让该客户端/服务器应用程序在(我应该说“通过”)互联网上运行:我的客户端代码在我的公司 LAN 中(换句话说,在我的机器上)和我的服务器代码在运行我的 Glassfish 的 Amazon VM 上服务器。由于某些原因,远程 Glassfish 正在 Windows VM 上运行。
显然(当我问这个问题时,你可以放心地猜测通过互联网测试不起作用。你是对的。
因此,为了进行更多猜测,我在我的机器和服务器上都启动了SmartSniffer 。
在我的机器上,我只能看到一个 TCP 数据包发送到该服务器实例(并且没有任何返回)。
在服务器实例上,我可以看到一个数据包进入(客户端查询)和一个数据包退出(服务器应答)。该服务器答案如下所示:
[4/4/2012 11:47:13 AM:917] GIOP.......(......NameService......._is_a... ................NEO..........(IDL:omg.org/SendingContext/代码库:1.0............n............172.27.63.145.Ô2......¯«Ë............e...... ……………………………………………………………………………………………………………………………………………………………………………… .....&................(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/CodeBase:1.0............ô........46.137.114.## #.'5....¯«Ë........d........................ ………………&…………!……|…… .....$... ...f............10.241.42.###.'6.@...... ..g........g........默认.........g.... ......+IDL:omg.org/CosNaming/NamingContextExt:1.0......¢.......10.241.42.208。 '5...M¯«Ë.... ...d... S1AS-ORB.........RootPOA.... TNameService......... ……………………………………………………………………………………………………………………………………………………………………………… ……&……
那 46.137.114.### 是我的 Amazon VM 的外部 IP,而 10.241.42.### 是它在亚马逊魔法虚拟服务器中的内部 IP。
所以看起来服务器正在回答,不是吗?
但是这个答案永远不会在我的网络中找到我的机器。
那么......我怎样才能检查它在哪里丢失?似乎数据包嗅探器已经完成了它的工作,但我现在能做什么?