RMI连接wifi和拨号上网

时间:2014-06-17 13:18:55

标签: java rmi distributed-computing

我使用rmi创建了一个简单的数据库应用程序。它适用于我的本地无线网络。但现在我想通过互联网将我的客户端连接到服务器。我知道,这可以通过在路由器中设置端口转发来实现。但我希望它可以在使用wifi连接,拨号连接到互联网的任何计算机上工作 连接等。怎么做? 在这写什么? Naming.lookup(“rmi:// ?????????????”); 由于我对java很新,请用一个简单的代码示例给我一个详细的答案。 提前致谢

1 个答案:

答案 0 :(得分:0)

我希望你对Java RMI概念感到困惑。具有讽刺意味的是,几天前,除了我正在考虑连接我的内部网络之外,我也在考虑相同的问题。

可以在Java RMI中使用两种类。

  

Remote类是可以远程使用其实例的类。一个东西   这样的类可以用两种不同的方式引用:   1.在构造对象的地址空间内,对象是一个普通对象,可以像任何其他对象一样使用。   2.在其他地址空间内,可以使用对象句柄引用对象。虽然人们如何使用,但存在局限性   对象句柄与一个对象相比,大部分都可以使用   对象句柄的处理方式与普通对象相同。

     

Serializable类是可以从一个实例复制的类   将空间扩展到另一个。 Serializable类的一个实例将是   称为可序列化对象。换句话说,可序列化的对象是   一个可以编组的。

因此,请回答您的问题,假设您正在谈论不同系统(服务器)上的远程类别。

  

远程对象的名称包含以下信息:

     

正在运行的计算机的Internet名称(或地址)   用于注册远程对象的对象注册表。如果   对象注册表与同一台机器运行在同一台机器上   发出请求,然后可以省略机器的名称。

     

Object Registry正在侦听的端口。如果是对象   注册表正在侦听默认端口1099,然后这不会   必须包含在名称中。

     

Object Registry中远程对象的本地名称。

使用常用的主机,端口和名称指定远程对象的URL:

rmi:// host:port / name

host =注册表的主机名(默认为当前主机) port =端口号注册表(默认为注册表端口号) name =远程对象的名称

假设您的代码位于主机名为“XYZ.edu/home/CLasses”的服务器上(您可以提供服务器的DNS / IP地址并包含类文件的位置), number =“1099”(默认值)和服务器中ABC.java类的远程Object =“abc”的名称。通过这种方式,可以从不同的机器调用远程对象。此外,您需要将整个服务器代码保留在Internet地址上,以便客户端可以从Internet访问它们(无法访问计算机中存在的脱机代码)。然后才会发生!!!

以下是客户端程序的示例:

/**
* Client program for the "Hello, world!" example.
* @param argv The command line arguments which are ignored.
*/
public static void main (String[] argv) {
try {
  HelloInterface hello = 
    (HelloInterface) Naming.lookup ("//ortles.ccs.neu.edu/Hello");   //see here the address of the server hosting the Server file,you can omit port number,it'll take default port 1099.
  System.out.println (hello.say());
 } catch (Exception e) {
  System.out.println ("HelloClient exception: " + e);
 }
}