2011-03-25 8 views
0

J'ai la classe suivante qui ouvre une connexion socket pour interroger un serveur WHOIS. Malheureusement, chaque fois que je l'exécuter (par exemple java WHOIS google.com), il jette toujours l'exception:ConnectException: l'opération a expiré

Contacting the WHOIS server for 'google.com' at whois.internic.net:43 
Exception in thread "main" java.net.ConnectException: Operation timed out 
    at java.net.PlainSocketImpl.socketConnect(Native Method) 
    at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333) 
    at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195) 
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182) 
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:432) 
    at java.net.Socket.connect(Socket.java:529) 
    at java.net.Socket.connect(Socket.java:478) 
    at java.net.Socket.<init>(Socket.java:375) 
    at java.net.Socket.<init>(Socket.java:189) 
    at WHOIS.performWhoisQuery(WHOIS.java:11) 
    at WHOIS.main(WHOIS.java:28) 

Le problème semble délai d'attente de connexion et j'ai essayé de définir le délai d'une valeur plus longue (par exemple 5000) et il didn ne fonctionne pas. Est-ce que cela a à voir avec un proxy et/ou un pare-feu? Je me suis coincé toute la journée dessus.

public class WHOIS { 
    public static void performWhoisQuery(String host, int port, String query) throws Exception { 
     System.out.println(" Contacting the WHOIS server for '" + query + "' at " + host + ":" + port); 

     Socket socket = new Socket(host, port); 

     InputStreamReader isr = new InputStreamReader(socket.getInputStream()); 
     BufferedReader br = new BufferedReader(isr); 

     PrintWriter out = new PrintWriter(socket.getOutputStream(), true); 
     out.println(query); 

     String aLine = ""; 
     while ((aLine = br.readLine()) != null) { 
      System.out.println(aLine); 
     } 
    } 

    public static void main(String[] args) throws Exception { 
     String domainNameToCheck = args[0]; 
     performWhoisQuery("whois.internic.net", 43, domainNameToCheck); 

    } 

} 

Répondre

2

Un moyen facile de vérifier si elle est un problème de pare-feu est à l'aide telnet pour se connecter à l'hôte cible/port à partir du même ordinateur.

Par exemple, sur ma boîte Linux:

[email protected]:~$ telnet whois.internic.net 43 
Trying 199.7.57.74... 
Connected to whois.internic.net. 
Escape character is '^]'. 

Si vous êtes en mesure de se connecter, le problème est avec votre programme Java. Sinon, le problème est ailleurs (pare-feu, etc.).

+0

Merci! Telnet se termine également avec le délai d'attente de connexion. Ok, cela a à voir avec les contraintes du pare-feu. Je vais l'essayer dans un environnement différent. –

+0

@Birhanu Mekuria Eshete Oui, mais se connecte-t-il d'abord, puis expire, ou ne parvient-il pas à se connecter complètement? – NPE

+0

il ne se connecte pas du tout. il se termine par: "Essayer 199.7.52.74 ... telnet: se connecter à l'adresse 199.7.52.74: l'opération a expiré telnet: Impossible de se connecter à l'hôte distant" " –