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