Java Socket Creation duurt te lang

Ik probeer de volgende Java-code uit te voeren op een Intel-gebaseerde Linux-machine (Custom Minimal Linux-versie: Linux 2.6.18). Het maken van een socket duurt te lang (~ 3 minuten). Wanneer ik de opdracht Top in Linux uitvoer, geeft dit aan dat mijn Java-proces in de slaapstand staat. Kan iemand me vertellen wat hier aan de hand is?

Java-versie: 1.6.0_24

try{
    System.out.println("Creating a Socket at: " + new Date());
    s = new Socket(hostname, p);
    System.out.println("Socket creation complete at: " + new Date());
    s.close();
}

UPDATE: getest met Java 1.7 (1.7.0_01) en het werkt prima. Het hele programma werkt onder de 5   seconden. Socket creation komt vrijwel onmiddellijk terug.

2
Hoe lang duurt het telnet om de shell-prompt (met dezelfde en als uw code te gebruiken )?
toegevoegd de auteur NPE, de bron
Telnet wacht enige tijd en krijgt het bericht "Verbinding gesloten door buitenlandse host". Dit kan de timing zijn. Ik weet dat die server draait. Na lang geduurd te hebben om een ​​socket te maken, kon mijn Java-programma echt goed met die server communiceren. Het enige probleem is de aanmaaktijd van de socket.
toegevoegd de auteur M99, de bron

2 antwoord

Ik denk dat het waarschijnlijk het DNS-probleem is. Gebruikt u hostnaam of IP? Als u de naam gebruikt, probeert u deze te pingen. Hoe lang duurt het voordat ping begint? Ik vermoed dat het veel tijd zal kosten. Probeer in elk geval het IP-adres in je Java-programma te gebruiken. Ik hoop dat het je probleem zal oplossen.

Als dit niet het geval is, controleer dan uw netwerkinstellingen, firewall, NAT, enz. Start waarschijnlijk vanaf een lokale verbinding, dus probeer uw programma op localhost, dan op een andere host in uw lokale netwerk en vervolgens op host in een ander netwerk (als u dit nodig hebt).

Succes.

3
toegevoegd
Hoe lang duurt telnet IP-poort ?
toegevoegd de auteur Peter Lawrey, de bron
Ik gebruik het IP-adres. Niet de domeinnaam. Ping is erg snel omdat de server die ik probeer aan te sluiten zich in hetzelfde netwerk bevindt (slechts één hop).
toegevoegd de auteur M99, de bron
Telnet wacht enige tijd en krijgt het bericht "Verbinding gesloten door buitenlandse host". Dit kan de timing zijn. Ik weet dat die server draait. Na lang geduurd te hebben om een ​​socket te maken, kon mijn Java-programma echt goed met die server communiceren. Het enige probleem is de aanmaaktijd van de socket.
toegevoegd de auteur M99, de bron

Ik bracht een hele ochtend door om er omheen te komen.

In my ubuntu, I try to turn the ipv6 setting(System Settings->Network) from "Automatic" to "Ignore", then everything is ok.

Het lijkt erop dat het een fout is voor JDK1.6 en ik zal JDK1.7 binnenkort proberen.

0
toegevoegd