uuussseeennn 2011-08-25 00:04
浏览 233
已采纳

RMI内外网访问失败

网络连接环境,两台机子+一路由器:
机子A:位于有线通网络,作为RMI客户端
机子B:位于电信网络,作为RMI服务器,连到无线路由器R上,机子B动态分配的IP为192.168.1.100。.
无线路由器R:此路由器接外网,外网IP为58.33.142.177,机子B就是连接它上网的。已在此路由器配置虚拟服务器,将端口1099映射到了192.168.1.100。

当机子A也连到路由器R上面时,A、B之间RMI正常;
当机子A连有线通网络时,能取得服务对象,但却不能调用此对象的接口。

 

服务器主要代码如下:

 

 

 System.setProperty("java.security.policy", Server.class.getResource("server.policy").toString ());  
 System.setProperty("java.rmi.server.hostname","58.33.142.177"); 
System.setSecurityManager(new RMISecurityManager());
            
LocateRegistry.createRegistry(1099);
            
TaskDispatcherImpl taskDispatcherImpl = new TaskDispatcherImpl();
Naming.rebind("rmi://192.168.1.100:1099/TaskDispatcher", taskDispatcherImpl);

 

客户端代码如下:

public class Client {
public static void main (String []args) throws Exception { 
try
{
     System.setProperty("java.security.policy", Client.class.getResource("server.policy").toString());
     System.setSecurityManager(new RMISecurityManager());
     Registry reg =LocateRegistry.getRegistry("58.33.142.177", 1099);
     TaskDispatcher taskDispatcher=(TaskDispatcher)reg.lookup("TaskDispatcher");   // 这一步能执行过去,取得的实际对象类型是TaskDispatcher_Stub

     TaskInfo taskInfo = taskDispatcher.getTaskInfo();   // 这一步会抛出异常
}
catch(RemoteException re)  {  re.printStackTrace ();  } 
}

  异常信息如下:

java.rmi.ConnectException: Connection refused to host: 58.33.142.177; nested exception is:

java.net.ConnectException: Connection timed out: connect

at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:601)

...

 

请帮我看看这是什么原因造成的,该怎么改,谢谢!

 

  • 写回答

2条回答 默认 最新

  • weixin_42565855 2011-08-25 01:17
    关注

    RMI服务会开启两个端口,一个注册端口,一个是通讯端口,其中通讯端口
    默认是随机的,需要把通讯端口固定下来,然后再路由器上做映射。
    具体参见:
    [url]http://blog.csdn.net/ktyl2000/article/details/4485896[/url]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog