`
m635674608
  • 浏览: 5068528 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

RMI 两个端口

    博客分类:
  • java
 
阅读更多

在项目中使用rmi,发布到linux,unix,由于开了防火墙。需要配置防火墙端口。刚开始配置了一个固定端口,死都连接不通,后来同netstat -antup |grep pid 查看进程监听的端口,,发现原来rmi有2个端口一个是固定的。一个是随机的。

RMI之所以使用的范围受限制主要有两方面原因,其一:必须要是java,平台的异构性受到限制;其二:穿越防火墙不方便。这里主要谈谈RMI如何通过固定分配端口来穿越防火墙。 RMI穿越防火墙不方便主要是因为除了RMI服务注册的端口(默认1099)外,与RMI的通讯还需要另外的端口来传送数据,而另外的端口是随机分配的,所以要想RMI的客户能通过防火墙来与RMI服务通讯,则需要能让随机分配的端口固定下来,具体做法如下:

1、增加一个文件SMRMISocket.java

 

  1. import java.rmi.server.*;
  2. import java.io.*;
  3. import java.net.*;
  4. publicclass SMRMISocket extends RMISocketFactory {
  5. public Socket createSocket(String host, int port) throws IOException{
  6. returnnew Socket(host,port);
  7. }
  8. public ServerSocket createServerSocket(int port) throws IOException {
  9. if (port == 0)
  10. port = 10990; //不指定就随机分配了
  11. returnnew ServerSocket(port);
  12. }
  13. }
import   java.rmi.server.*;  

import   java.io.*;  

import   java.net.*;  

public   class   SMRMISocket   extends   RMISocketFactory   {  

          public   Socket   createSocket(String   host,   int   port)  throws   IOException{  

                  return   new   Socket(host,port);  

          }  



          public   ServerSocket   createServerSocket(int   port)   throws   IOException   {  

                  if   (port   ==   0)  

                          port   =   10990; //不指定就随机分配了 

                  return   new   ServerSocket(port);  

          }  

  }   

2、在实例化UnicastRemoteObject的子类前加入一下代码:

 
  1. try {
  2. RMISocketFactory.setSocketFactory(new SMRMISocket());
  3. } catch (Exception ex) {
  4. }
分享到:
评论

相关推荐

    Rmi示例 Rmi代码示例

    在"Rmi示例 Rmi代码示例"中,我们有两个核心文件:RmiServer和RmiClient,分别代表了RMI系统中的服务端和客户端。以下是对这两个文件及其涉及的知识点的详细解释: 1. **RMI服务端**(RmiServer): - **接口定义*...

    SpringRMI小例子

    服务器端主要包含两部分:RMI服务接口和它的实现。服务接口定义了可供客户端调用的方法,而服务实现则是这些方法的具体执行逻辑。Spring会将这个实现注册到RMI注册表中,使得客户端可以通过接口的名称来查找并调用...

    rmi技术客户端调用服务器的函数解决问题

    下载新的jsk并没有解决我的问题,因为这个jdk也是有问题的,所以下载jdk还是去官网下,可是官网要注册,又是国外网站下载又慢,然后就去下载同学的,然后就出现下一个问题,jdk版本不匹配错误,因为有两个jdk1.8,一...

    java rmi 参考文档

    对象注册表通常运行在一个已知端口上(默认为1099)。服务器启动后,会将对象以文本形式注册到对象注册表中。客户端在调用远程方法之前,必须首先联系对象注册表以获取对远程对象的访问权限。 #### 三、RMI中的对象...

    zookeeper+rmi开发

    RMI包含两个主要组件:远程接口(Remote Interface)和远程对象(Remote Object)。远程接口定义了远程方法,而远程对象实现了这些接口并提供具体实现。通过RMI,开发者可以轻松地构建分布式系统,使得跨网络的服务...

    JAVA RMI实现程序实例

    在两台机器上测试RMI应用程序时,确保防火墙设置正确,允许RMI相关的端口(默认是1099)通信。同时,需要在两台机器上安装JDK,并配置好Java环境。 通过上述步骤,我们可以实现一个简单的RMI“Hello, World”程序,...

    rmi.rar_Java RMI_RMI java_RMI policy.all_rmi

    在“www.pudn.com.txt”和“rmi”这两个文件中,可能包含了关于RMI的详细教程、代码示例或配置说明。例如,“www.pudn.com.txt”可能是一个文档,详细解释了RMI的概念和如何创建、部署RMI应用程序;而“rmi”可能是...

    rmi与spring整合实例

    在IT行业中,远程方法调用(Remote Method Invocation,RMI)和Spring框架是两个非常重要的概念,它们在分布式系统开发中发挥着关键作用。RMI是Java平台提供的一种技术,用于在不同Java虚拟机(JVM)之间进行对象间...

    如何在Spring框架中使用RMI技术.zip

    本压缩包提供了两个Java工程示例,帮助开发者了解如何在Spring环境中集成并使用RMI。 首先,让我们理解RMI的基本概念。RMI是Java提供的一种机制,使得一个Java对象能够调用运行在不同JVM上的另一个Java对象的方法。...

    基于rmi的远程控制

    这个“基于RMI的远程控制”项目,虽然其界面设计可能不尽如人意,但核心功能是实现了通过网络在两台计算机之间进行交互操作。 RMI的工作原理基于对象的分布式计算模型,它允许一个Java对象调用位于另一台机器上的...

    java spring rmi

    首先,我们来看“SpringRMIClient”和“SpringRMIServer”这两个文件名,它们分别代表了RMI应用中的客户端和服务端。在RMI中,服务端会暴露一些远程接口,这些接口定义了可以在远程系统上执行的方法。客户端则通过...

    java RMI demo

    在"java RMI demo"中,通常包含两个主要部分:rmiclient和rmiserver,分别代表客户端和服务器端。 1. **RMI服务器(rmiserver)**: - **注册表(Registry)**:RMI系统的核心组件,用于存储远程对象的引用。...

    RMI协议的应用与研究

    默认情况下,RMI使用TCP端口1099,可以通过防火墙策略限制访问。另外,还可以使用SSL/TLS增强通信的安全性。 在实际应用中,RMI常用于构建分布式系统,例如服务器集群管理、分布式数据库系统、分布式计算等。RMI...

    RMI远程调用代码及使用方法

    **解释**:这里定义了一个名为`AddServer`的接口,继承自`Remote`,其中声明了一个名为`AddNumbers`的方法,接受两个整型参数并返回它们的和。 ##### 2. 服务端实现 ```java import java.rmi.RemoteException; ...

    一个基于RMI的小巧好用的框架

    【标签】:“源码”和“工具”这两个标签表明,该压缩包可能包含了框架的源代码,用户可以深入研究其内部工作原理,并且可以将这个框架作为一个实用工具来使用,以便在自己的项目中实现远程方法调用。 【压缩包子...

    RPC-RMI实现加法的简单示例程序

    在这个示例中,客户端通过RMI查找名为"Calculator"的远程对象,然后调用它的`add`方法,计算两个数字的和。服务器端创建并注册了该对象,使得客户端可以跨网络调用。 这个简单的加法示例展示了RPC和RMI的基本使用...

    spring+rmi非本地实现

    在这个“spring+rmi非本地实现”的项目中,我们有两个主要部分:客户端(client)和服务端(rmiserver)。让我们深入探讨一下这两个部分以及它们如何协同工作。 1. **服务端(rmiserver)**: - **创建RMI接口**:...

    rmi基础教程

    4. **生成存根和骨架**:使用`rmic`工具编译`CalculatorImpl`类,该工具会生成两个辅助类`Calculator_stub`和`Calculator_Skel`,分别用于客户端和服务端的远程调用支持。 5. **注册远程对象**:在服务器端,通过`...

    RMI最简单的一个实例

    首先定义服务端接口 `AddServer`,该接口继承自 `Remote` 接口,并声明了一个远程方法 `addData()` 用于执行两个整数相加的操作: ```java public interface AddServer extends Remote { public int addData(int a...

    RMI开发实例源码 动态注册和静态注册

    3. **配置文件**:如`server.properties` 或 `client.properties`,可能包含了RMI注册表的地址和端口等信息。 4. **运行脚本**:用于启动服务器和客户端的脚本,可能涉及启动`rmiregistry`,运行服务器应用程序和...

Global site tag (gtag.js) - Google Analytics