0

我有一个客户端/服务器应用程序,它通过 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。

所以看起来服务器正在回答,不是吗?

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

那么......我怎样才能检查它在哪里丢失?似乎数据包嗅探器已经完成了它的工作,但我现在能做什么?

注意这个问题是对“如何通过 NAT 将 glassfish 客户端连接到 glassfish 服务器?”的澄清。

4

1 回答 1

0

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

于 2012-04-04T12:14:07.080 回答