【问题标题】:Java "hello world" over the internet (RMI, RMI-IIOP, EJB) [duplicate]互联网上的 Java“hello world”(RMI、RMI-IIOP、EJB)[重复]
【发布时间】:2015-05-26 09:33:38
【问题描述】:

好的,我对此束手无策。我需要编写一个可以在连接到互联网的不同机器上运行的服务器和客户端(不在同一个网络/路由器上)。我尝试过 RMI、RMI-IIOP、EJB/GlassFish、CORBA,但我所做的一切都不起作用(通过互联网)。我一定学过 30 篇教程、示例和指南,但它们都被设计为在一台机器上运行,当尝试从另一台计算机远程连接时它不起作用。

我想要的只是一个“hello world”类型的示例,其中服务器从计算机 1 启动/部署,客户端在计算机 2 上运行,它们可以通过 Internet 交换简单的对象和变量。所以我可以解构它并“看到”我做错了什么。

拜托,拜托,请有人指点我一个教程的方向,或者只是专门通过互联网交流的代码。

我一直在使用 Oracle、netbeans、coderanch、stackoverflow,但没有发现任何帮助。

我在 Windows 7(两台计算机)上使用 NetBeans 8.0.2 和 GlassFish 4.1

编辑 - 澄清问题。

我编写了一个程序,其工作方式与 Teamviewer 类似,我可以在其中监视同一网络上多台计算机的屏幕,并在需要时与这些计算机进行交互。我的软件本质上是抓取屏幕截图并将它们作为字节数组传输,以及发送包含屏幕、系统、鼠标和键盘信息的各种简单数据对象。这适用于 RMI,但我想扩展它以支持不在同一网络上的计算机,因此通过互联网。我在这里读过 RMI 不适合,我的测试已经证实了这一点。所以我的下一个合乎逻辑的步骤是使用 EJB 或 RMI-IIOP,但我根本无法让它们通过网络工作,更不用说通过互联网了。所以我真的在这里寻求一些帮助,以了解我做错了什么,因此通过互联网请求“你好世界”。我在这方面的经验很少,每个例子都是本地的,所以我需要弥合从本地到互联网的差距。我认为我的部分误解是我认为 Glassfish 将我的服务器实验暴露在互联网上,而不仅仅是在本地。如您所见,我的知识存在一些空白,希望您能帮助我填补。

【问题讨论】:

  • 您应该检查如何在这些教程中更改配置。您的实际问题是什么,请记住我们不分发代码?
  • 对我来说,您似乎在区分本地服务器实例(仅适用于您的计算机)和实际的 Internet 连接服务器之间存在问题。您已经写过您正在使用 GlassFish 4.1 服务器,问题是,该服务器在哪里可用:)?它是仅部署在您的计算机上,还是由某些远程 Internet 服务托管?为了使您的服务可用,您必须授予它一些公共领域。这可以在openshift.com 轻松完成。阅读其中包含的一些教程,几天之内您就可以发布您的服务。
  • 我已经更新了 OP 以澄清。我认为这正是我的问题。我现在正在注册 openshift,希望我能在这方面取得进一步进展。
  • 你什么都没澄清。您已经说过某些事情不起作用,并且您已经问过如何做其他事情。这完全是模糊的。你也有一个existing question,关于你已经接受了一个答案并提出了一个已经回答的后续问题的同一主题。
  • 不正确!我再次询问(更详细地说明我打算将它用于什么)是否有人可以帮助我理解,最好是链接到如何在互联网上使用这些技术的示例。这里的其他人似乎明白我在问什么,你的问题是什么?

标签: java ejb rmi


【解决方案1】:

我建议使用 RESTful Web 服务(使用 JSON)。您可以在几分钟内使用 GlassFish 和 NetBeans 设置一个(例如:http://java.dzone.com/news/simple-restful-web-services)。由于 REST 通过 HTTP 运行,因此它是防火墙透明的。您也可以仅使用浏览器轻松对其进行测试。

另外,请确保您可以从客户端访问服务器计算机。路由问题可能是这里的问题。请记住,您不能轻易调用没有公共 IP 地址的服务器。

更新

很遗憾,我的声誉太低,无法就您的问题发表评论,因此请在此处尝试。我认为您的问题在于计算机网络领域,而不是您正在尝试的任何 Java 技术。假设您正在 PC 上运行服务器,并要求朋友从他/她的 PC 调用此服务器上的服务。很可能这是不可能的,因为你们俩都在 NAT 后面并且看不到对方的 IP 地址。有一些技术可以帮助克服这个问题,但它们都需要第三方服务。每台可通过 Internet 直接访问的服务器都有一个公共 IP 地址,但这些都需要花钱并且需要一些额外的网络配置。如果这不是问题,请确保服务器的 IP 可从客户端路由。尝试 ping IP 以开始。另一个问题可能是防火墙。确保没有任何东西阻止您选择的技术使用的端口和协议。据我所知,您提到的技术不应该在公共网络上使用。这就是我建议使用 REST 的原因 - 它可以帮助您排除网络问题并测试客户端和服务器之间的基本连接。

【讨论】:

  • 谢谢,这很有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-18
  • 2018-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-15
  • 2016-09-01
相关资源
最近更新 更多