- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
有没有办法在RMI时同时知道客户端和服务端的端口号?
当RMI中返回一个结果给客户端,下次客户端请求结果时,客户端和服务器之间的对话是否会和上一次在同一个端口,当服务器从第一个结果返回后一直在运行还是创建了一个新端口?
例如:
// call to a remote method add
addServerIntf.add(d1,d2)
// after this call i get the added result
// again call the add method by again starting the client
addServerIntf.add(d1,d2)
// I get the result back as usual
在两次不同的调用中,客户端和服务器的端口号是否保持不变?
我的客户端程序在输入类似 java AddClient localhost 100 200 命令后退出,服务器上的方法返回300,客户端退出。下次我再次使用 java AddClient localhost 19 100 启动我的客户端时。现在将从与之前发送的相同端口发送请求,服务器是否会在相同端口上接收请求?或者情况与我刚刚写的不同?
最佳答案
Is there a method to know the port number of both the client and server during RMI?
如果我没有误解的话,我认为在 RMI session 期间没有办法知道端口号。
如果你有一个不同的端口号,从默认的 RMI 注册表服务器 1099 端口,你必须在服务器类和客户端类上设置它,因为,作为 Oracle RMI page报告:
If the registry will be running on a port other than 1099, you'll need to specify the port number in the calls to LocateRegistry.getRegistry in the Server and Client classes. For example, if the registry is running on port 2001 in this example, the call to
getRegistry
in the server would be:
Registry registry = LocateRegistry.getRegistry(2001);
和:
This client first obtains the stub for the registry by invoking the static LocateRegistry.getRegistry method with the hostname specified on the command line. If no hostname is specified, then null is used as the hostname indicating that the local host address should be used.
然后,我的结论是,你无法通过一种方法知道 RMI session 的端口号(你可以查看 RMI API 了解详细信息),除非你必须设置它,如果它不同于默认的 RMI 注册表服务器 1099 端口,因为您必须在 RMI session 开始时知道它。
试想:如何获得这个端口号?联系服务器还是客户端?例如,如果您请求位于特定服务器中的页面,该页面正在监听端口 81(而不是默认的 80 端口),您需要提前连接到该特定服务器的端口号,联系它,例如: http://192.168.1.1:81
。然后,在 RMI session 期间,您必须提前知道 RMI 注册端口。
检查这个page了解详情。
When a result is returned during RMI to the client, next time the client requests the result, will the conversation between client and server be at the same port as the previous, when the server has been running since the first result was returned or a new port is created?
当结果返回给客户端时,客户端和服务器之间的对话应该在同一个RMI注册端口上共享,否则,如果客户端中设置的RMI注册端口与服务器RMI注册端口不同(如果我没有忘记),代码将抛出一个 RemoteException
,当 RMI 进程发生故障时可能会发生这种情况。
更新
现在我看到了你更新的问题。
In the 2 different calls does the port number of client and server remain the same ?
它应该是相同的 RMI 注册表服务器端口。当您的程序在第一次调用后退出时,程序将关闭套接字连接。下次启动程序时,RMI 注册端口应该是相同的。否则,您的程序应该抛出异常,或者,当您将参数传递给程序时,您会得到意想不到的结果。如果我理解的话,您的客户端程序只是调用服务器上的 sum 方法。在第一个结果之后,下次启动程序时,会得到不同的结果吗?如果不是,我认为 RMI 注册表端口是相同的。
关于java - 在 RMI 期间知道端口号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8591990/
我正在编写一个 RMI 应用程序。 我能够执行 RMI。数据通过 RMI 在客户端和服务器之间传输。 客户端应始终接收/更新服务器端数据。 是否有可能有一个监听器可以将数据更新/修改从服务器传输或通知
我正在使用 JMX-RMI 代理进行消息传递。我有一个 java 程序,它向一组监听器/监听器发送一条具有名称/ID 的消息。根据监听器收到的消息,客户端程序会相应地运行。这篇文章工作正常,但我想知道
我有一个 RMI 服务器,当在本地主机上运行时,它可以正确绑定(bind)到 RMI 注册表(以证明设置正确)。执行此操作的代码是: private void exposeTickHistoryRe
我想获取服务器端每个客户端的 ip 地址,服务器为其返回一个 stub 。是否可以? 最佳答案 请参阅 RemoteServer.getClientHost()。您可以在远程方法实现中调用它。但是,当
我有两个 Java 程序 - RMIServer 和 RMIClient。如果我将它们作为两个单独的 Java 调用启动,一切都会按预期工作。那就是 $ java -cp someclasspath
目前正在阅读有关 RPC 和 RMI 的资料,我对它们之间的区别有点困惑。 在实现 RMI 和 gRPC 时,语法基本相同。 它们都有确定方法参数和响应的接口(interface)。 它们都可以在参数
这个问题在这里已经有了答案: 12年前关闭。 Possible Duplicate: RMI and CORBA Differences? RMI 和 Corba 有什么区别? 最佳答案 RMI 是一
我是 java RMI 的新手,我正在尝试创建一个类似 Peer 2 Peer 的 bit torrent 应用程序,其中同一对等点的多个实例可能位于同一台机器上。这意味着我需要能够在同一台机器上注册
当我尝试运行我的 RMI 示例时出现远程异常。我不明白为什么。我在不对程序本身或 JVM 进行任何参数的情况下运行该程序。 请帮助我摆脱异常。 非常感谢 这是我得到的异常: Server except
关于 Oracle's FAQ page关于 Java RMI,它说: While the Java Remote Method Invocation (Java RMI) server can th
我有一个 java rmi 服务器和一个 java rmi 客户端在两台独立且不同的机器。 服务器基本上是一个斐波那契计算器。它接收一堆数字并根据它们计算斐波那契数列。 客户端只需发送一堆数字供服务器
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 8 年前。 Improve th
我想知道 RMI 中是否可以在与提供服务的服务器不同的主机上启动 RMIregistry。 最佳答案 是的,这是可能的,但不方便,因为bind()、rebind()和unbind()只能从本地主机接受
我在连接客户端类的远程对象时遇到一些问题。当我运行以下客户端类时,我收到 java.rmi.ConnectException。 import java.rmi.registry.LocateRegis
我正在尝试让一台计算机上的客户端通过 Java RMI 与另一台计算机上的服务器通信。我将服务器部署在端口 Y 上的主机 IP X 上。然后,我尝试让客户端查找服务器上的远程对象,但出现以下异常: E
我有一个自定义的 RMIClientSocketFactory,它覆盖“createSocket”来创建一个特殊的套接字。 如何在我的 rmi 远程接口(interface)实现中获取这个套接字? (
我的 RMI Reaper 线程有问题,它不允许我的所有程序终止,因为该线程不是守护进程。我发现信息表明该线程仅在所有对象均未导出时停止。所以我有以下代码来创建 rmi serer。 registry
当我在运行 RMI 服务器后尝试运行 RMI 客户端时,出现以下异常: EncodeInterface exception: java.lang.ClassCastException: $Proxy3
我想为 RMI 客户端应用程序编写一组系统集成测试。我想在 JUnit 3.8.2 中启动 RMI 服务器,然后运行这些测试。有没有人这样做过? 我在带有 main 的 pojo 中使用类似这样的东西
这个问题已经有答案了: java.rmi.ServerException: RemoteException occurred in server thread (ClassNotFoundExcept
我是一名优秀的程序员,十分优秀!