2009-08-04 14 views
2

Ich lerne gerade, wie man Netzwerke in Java macht und das erste einfache Beispiel, wie man die Zeit von einem NTP-Server bekommt, wirft eine ConnectException. Ich werde den Code kopieren und einfügen, aber ich habe das Gefühl, dass es etwas sein muss, das nicht Code-bezogen ist, da dieser Code aus einem Buch stammt.Verbindung zu einem NTP-Server funktioniert immer noch nicht (Java)

import java.io.*; 
import java.net.*; 

public class AskTime { 

    public static void main(String a[]) throws Exception { 
     if(a.length != 1) { 
      System.out.println("your lame"); 
      System.exit(0); 
     } 

     String machine = a[0]; 
     final int daytimeport = 13; 
     Socket so = new Socket(machine,daytimeport); 
     BufferedReader br = new BufferedReader(new InputStreamReader(so.getInputStream())); 
     String time = br.readLine(); 
     System.out.printf("%s says it is %s %n", machine, time); 
    } 
} 

Der Befehl, den ich dies auszuführen bin mit ist:

java AskTime us.pool.ntp.org

Update: Nach msaeed Rat Lesen ich den Port 123 geändert und bin jetzt wird gesagt, Verbindung abgelehnt statt Zeitüberschreitung der Verbindung. Also denke ich, dass msaeed Recht hat, hat jemand eine Idee, was ich sonst noch kommunizieren muss, um eine Zeit zu bekommen?

+0

Oh ja, und der "Ihre lahme" Teil war nicht aus dem Code in dem Buch alles andere bin ich mir ziemlich sicher ist identisch. – Anton

Antwort

4

Also scheinbar verwendet dieser Code die alte DAYTIME protocol, die Port 13 verwendet. NTP protocol verwendet Port 123 und erfordert ein bisschen mehr Kommunikation. Viele der NTP Server haben DAYTIME Abfragen nicht mehr unterstützt. Das NTP-Projekt enthält einen Beispielcode für einen NTP-Client in Java here.

+0

Irgendeine Idee, was es sonst erfordert, um eine Zeit zu verlangen? – Anton

+0

aktualisierte Antwort mit Link zum Beispielcode! – notnoop

1

msaeed ist richtig. oder wählen Sie eine andere aus this list

aktualisieren Wenn Ihr Endziel zu kommunizieren mit NTP-Server ist (im Gegensatz zu spielen mit Steckdosen, wie Sie‘- Sie können Ihren Code mit DAYTIME Server wie‚time.nist.gov‘verwenden sagte anfangs) sollten Sie sich Commons Net ansehen. Eigentlich sollte man sich die Quelle anschauen - Commons Net implementiert ziemlich viele Netzwerkprotokolle.

+0

Es ist beides für die Hilfe. – Anton

Verwandte Themen