2011-04-14 11 views
10

he utilizado en mi código RMI:java.net.ConnectException: se agotó el tiempo de espera de la conexión: ¿conectar?

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); 
     } 
    } 
} 

Estos son 4 archivos .java escritos.

Luego compilo todos estos archivos. Luego creo un stub usando rmic AddServerImpl. Después de eso, comienzo el registro de rmi en el lado del servidor usando start rmiregistry. Entonces comienzo el servidor que usa java AddServer y finalmente el cliente que usa java AddClient 27.60.200.80 5 9. pero no pasa nada

excepción que se produce en el lado del cliente es java.net.ConnectException : connection timed out : connect

Cuál es la razón y cómo puedo solucionar esto?

El equipo cliente éstos son los siguientes archivos .class AddClient.class AddServerImpl.class AddServerImpl_Stub.class y en el lado del servidor AddServer.class AddServerImpl.class AddServerImpl_Stub.class AddServerIntf.class

+0

Deja la seguimiento de la pila de la excepción si alguna –

+0

Explicación más simple: la dirección IP de su servidor no es lo que usted cree que es – Anon

+0

@ Anon, ¿cómo puede decirlo? – saplingPro

Respuesta

29

El mensaje de error dice todo: el tiempo de conexión agotado. Esto significa que su solicitud no recibió una respuesta dentro de un período de tiempo (predeterminado). Las razones por las que no se recibió respuesta es probable que sea uno de:

  • a) El IP/dominio o puerto es incorrecto
  • b) El IP/dominio o puerto (es decir, servicio) es hacia abajo
  • c) El IP/dominio demora más que su tiempo de espera predeterminado para responder
  • d) Usted tiene un firewall que está bloqueando solicitudes o respuestas en cualquier puerto que esté usando
  • e) Usted tiene un firewall que bloquea las solicitudes ese host particular
  • f) Yo ur acceso a Internet está abajo

Tenga en cuenta que los servidores de seguridad y puerto o el bloqueo de IP pueden estar en su lugar por su ISP

+0

@ Richard de estos no veo ningún motivo. – saplingPro

+2

@Meprog: aunque no ve ningún motivo, son cosas que debe investigar y probar, porque son las razones más probables para una conexión a tiempo de espera. También debe tomar el consejo de otras personas y editar su publicación con el seguimiento completo de la pila. – Anon

+1

Ni (a) no (b) es correcto. Ambos producirían 'conexión rechazada'. – EJP

0

Número (1): La dirección IP es incorrecta - es la respuesta correcta. El archivo/etc/hosts (a.k.a. C: \ Windows \ system32 \ drivers \ etc \ hosts) tenía una entrada incorrecta para el nombre de la máquina local. Se corrigió el archivo 'hosts' y Camel funciona muy bien. Gracias por el puntero.

+0

me llevó días de búsqueda para encontrar esto, que respondió a un problema que tenía con ehcache multicasting ... isp tenía una configuración de IP incorrecta en el archivo/etc/hosts para la máquina. Gran idea! –

+0

Número (1) de qué? – EJP

0

Si usted está señalando la config en un dominio (por ejemplo fabrikam.com), hacer un nslookup para asegurar que todos los proyectos de investigación que responden son válidos, y se pueden conectar a en el puerto 389:

NSLOOKUP fabrikam.com 

Test-NetConnection <IP returned from NSLOOKUP> -port 389 
Cuestiones relacionadas