La connessione a un server NTP continua a non riuscire (Java)
-
22-07-2019 - |
Domanda
Sto solo imparando come fare rete in Java e il primo semplice esempio di come ottenere il tempo da un server NTP continua a lanciare una ConnectException. Copierò e incollerò il codice, ma ho la sensazione che debba essere qualcosa non correlato al codice poiché questo codice è uscito da un libro.
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);
}
}
Il comando che sto usando per eseguire questo è:
java AskTime us.pool.ntp.org
Aggiornamento: dopo aver letto i consigli di msaeed ho cambiato la porta in 123 e ora mi viene detto che la connessione è stata rifiutata invece che la connessione è scaduta. Quindi penso che msaeed abbia ragione, qualcuno ha idea di cos'altro devo comunicare per ricevere un orario?
Soluzione
Quindi apparentemente questo codice utilizza il vecchio DAYTIME
che utilizza la porta 13. NTP
protocol utilizza la porta 123 e richiede un po ' più comunicazione. Molti server NTP
hanno smesso di supportare le query DAYTIME
.
Il progetto NTP fornisce un codice di esempio per un client NTP
in Java qui .
Altri suggerimenti
msaeed ha ragione. Puoi usare il tuo codice con il server DAYTIME come 'time.nist.gov' - oppure sceglierne uno qualsiasi da questo elenco
Aggiorna Se il tuo obiettivo finale è quello di comunicare con il server NTP (invece di giocare con i socket come hai detto inizialmente) dovresti guardare Commons Net . In effetti, dovresti guardare la sua fonte in entrambi i modi: Commons Net implementa alcuni protocolli di rete.