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

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条)

报告相同问题?

悬赏问题

  • ¥30 关于#java#的问题,请各位专家解答!
  • ¥30 vue+element根据数据循环生成多个table,如何实现最后一列 平均分 合并
  • ¥20 pcf8563时钟芯片不启振
  • ¥20 pip2.40更新pip2.43时报错
  • ¥15 换yum源但仍然用不了httpd
  • ¥50 C# 使用DEVMOD设置打印机首选项
  • ¥15 麒麟V10 arm安装gdal
  • ¥20 OPENVPN连接问题
  • ¥15 flask实现搜索框访问数据库
  • ¥15 mrk3399刷完安卓11后投屏调试只能显示一个设备