2011-04-14 89 views
10

我在代碼中使用RMI:java.net.ConnectException:連接超時:connect?

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文件。

接下來我編譯所有這些files.Then我創建一個stub使用rmic AddServerImpl。之後,我使用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

+0

郵政堆棧跟蹤的異常,如果有的話 – 2011-04-14 11:38:37

+0

最簡單的解釋:你服務器的IP地址不是你認爲的那樣 – Anon 2011-04-14 11:41:07

+0

@Anon你怎麼這麼說? – saplingPro 2011-04-14 11:52:31

回答

29

錯誤消息說,這一切:你的連接超時。這意味着您的請求在某個(默認)時間範圍內沒有得到回覆。沒有響應被接收的原因很可能是以下之一:

  • 一)IP /域或端口不正確
  • b)中的IP /域或端口(即服務)是向下
  • c)IP /域所用的時間超過默認超時時間
  • d)您的防火牆阻止了您使用的任何端口上的請求或響應
  • e)您的防火牆阻止了那個特定的主機
  • f)Yo烏爾上網下跌

注意,防火牆和端口或IP阻止可能由您的ISP到位

+0

@理查德這些我沒有看到任何理由。 – saplingPro 2011-04-14 12:26:26

+2

@Meprog - 儘管你沒有看到任何理由,但他們是你應該調查和測試的東西,因爲它們是連接超時的最可能原因。您還應該接受其他人的建議,並使用完整的堆棧跟蹤編輯您的帖子。 – Anon 2011-04-14 12:29:52

+1

(a)不是(b)是正確的。兩者都會產生'連接被拒絕'。 – EJP 2015-10-27 09:14:33

0

數(1):該IP是不正確的 - 是正確的答案。/etc/hosts文件(又名: C:\ Windows \ system32 \ drivers \ etc \ hosts)對本地計算機名稱有不正確的條目。 更正了'主機'文件,駱駝運行得非常好。感謝指針。

+0

花了我幾天的時間來找到這個,它解決了我使用ehcache多播時遇到的一個問題...... isp在機器的/ etc/hosts文件中有錯誤的IP設置。偉大的見解! – 2012-05-23 18:49:46

+0

數目(1)是什麼? – EJP 2015-10-27 09:14:53

0

如果你在一個域(如fabrikam.com)指向的配置,做一個nslookup來確保所有的響應IP地址是有效的,並且可以連接到端口389:

NSLOOKUP fabrikam.com 

Test-NetConnection <IP returned from NSLOOKUP> -port 389 
相關問題