【问题标题】:java.net.ConnectException :connection timed out: connect?java.net.ConnectException:连接超时:连接?
【发布时间】:2011-08-05 11:00:51
【问题描述】:

我在我的代码中使用了 RMI:

 import java.rmi.*;

 public interface AddServerIntf extends Remote {
  double add(double d1,double d2) throws RemoteException;
 }

import java.rmi.*;
import java.rmi.server.*;

public class AddServerImpl extends UnicastRemoteObject implements AddServerIntf {
  public AddServerImpl() throws RemoteException {
  }

 public double add(double d1,double d2) throws RemoteException {
  return d1+d2;
 }
}  

import java.net.*;
import java.rmi.*;

public class AddServer {
   public static void main(String args[]) {
    try {
     AddServerImpl addServerImpl=new AddServerImpl();
     Naming.rebind("AddServer",addServerImpl);
    }  catch(Exception exc) {
          System.out.println(exc);
       }
   }
}

import java.rmi.*;
public class AddClient {
  public static void main(String args[]) {
     try {
       String Url="rmi://"+args[0]+"/AddServer";
       AddServerIntf addServerIntf=(AddServerIntf)Naming.lookup(Url);
       System.out.println("The first number is "+args[1]);
       double d1=Double.valueOf(args[1]).doubleValue();
       System.out.println("The second number is: "+args[2]);
       double d2=Double.valueOf(args[2]).doubleValue();
       System.out.println("The Sum is: "+addServerIntf.add(d1,d2));
     }  catch(Exception exc) {
         System.out.println(exc);
       }
   }
 }

这些是编写的 4 个 .java 文件。

接下来我编译所有这些文件。然后我使用rmic AddServerImpl 创建一个stub。之后,我使用start rmiregistry 在服务器端启动 rmi 注册表。然后我使用java AddServer 启动服务器,最后使用java AddClient 27.60.200.80 5 9 启动客户端。 但什么也没发生

在客户端抛出的异常是java.net.ConnectException : connection timed out : connect

这是什么原因,我该如何解决?

在客户端机器上,这些是以下 .class 文件 AddClient.class AddServerImpl.class AddServerImpl_Stub.class 和服务器端 AddServer.class AddServerImpl.class AddServerImpl_Stub.class AddServerIntf.class

【问题讨论】:

  • 发布异常的堆栈跟踪(如果有)
  • 最简单的解释:你的服务器的IP地址不是你想的那样
  • 通常的原因可以通过 RMI FAQ 中的 A.1 项解决。

标签: java networking rmi stub


【解决方案1】:

异常:java.net.ConnectException

这意味着您的请求没有在规定的时间内得到服务器的响应。他们是这个例外的一些原因:

  • 过多的请求使服务器过载
  • 由于网络配置错误或线路过载导致请求丢包
  • 有时防火墙会在服务器获取之前消耗请求数据包
  • 还取决于线程连接池配置和连接池的当前状态
  • 在转换过程中丢失响应包

【讨论】:

    【解决方案2】:

    如果您将配置指向域(例如 fabrikam.com),请执行 NSLOOKUP 以确保所有响应 IP 均有效,并且可以连接到端口 389:

    NSLOOKUP fabrikam.com
    
    Test-NetConnection <IP returned from NSLOOKUP> -port 389
    

    【讨论】:

    • 为什么?端口 389 是 LDAP。这是 Java RMI。
    【解决方案3】:

    错误消息说明了一切:您的连接超时。这意味着您的请求在某些(默认)时间范围内没有得到响应。未收到回复的原因可能是以下原因之一:

    • a) IP/域或端口不正确
    • b) IP/域或端口(即服务)已关闭
    • c) IP/域的响应时间超过了默认超时时间
    • d) 您有防火墙阻止您使用的任何端口上的请求或响应
    • e) 您的防火墙阻止了对该特定主机的请求
    • f) 您的互联网访问已关闭

    请注意,您的 ISP 可能会设置防火墙和端口或 IP 阻止

    【讨论】:

    • @Richard 这些我看不出任何理由。
    • @Meprog - 即使您看不到任何原因,但您应该调查和测试它们,因为它们是连接超时的最可能原因。您还应该听取其他人的建议并使用完整的堆栈跟踪编辑您的帖子。
    • (a) 和 (b) 都不正确。两者都会产生“连接被拒绝”。
    • 对于java,使用host = "localhost"
    • @shihab_returns 怎么用?在哪里?为什么?你在说什么?
    【解决方案4】:

    数字 (1):IP 不正确 - 是正确答案。 /etc/hosts 文件(a.k.a. C:\Windows\system32\drivers\etc\hosts )的本地计算机名称条目不正确。 更正了“主机”文件,Camel 运行良好。谢谢指点。

    【讨论】:

    • 我花了好几天的时间搜索才找到它,它回答了我在使用 ehcache 多播时遇到的问题...isp 在机器的 /etc/hosts 文件中设置了错误的 IP。伟大的洞察力!
    猜你喜欢
    • 2014-03-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-27
    • 2012-09-29
    • 2014-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多