Соединение с сервером NTP продолжает терпеть неудачу (Java)
-
22-07-2019 - |
Вопрос
Я только учусь работать в сети на Java, и первый простой пример получения времени от NTP-сервера продолжает вызывать исключение ConnectException. Я скопирую и вставлю код, но у меня есть ощущение, что это должно быть что-то не связанное с кодом, так как этот код вышел из книги.
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);
}
}
Команда, которую я использую для выполнения этого:
java AskTime us.pool.ntp.org
Обновление . Прочитав совет msaeed, я изменил порт на 123, и теперь мне сообщают, что вместо соединения истекло время ожидания соединения. Так что я думаю, что msaeed прав, кто-нибудь знает, что еще мне нужно сообщить, чтобы получить время?
Решение
Итак, очевидно, этот код использует старый DAYTIME
протокол , который использует порт 13. NTP
протокол использует порт 123 и требует немного больше общения. Многие из серверов NTP
перестали поддерживать запросы DAYTIME
.
Проект NTP предоставляет пример кода для клиента NTP
на Java .
Другие советы
msaeed правильно. Вы можете использовать свой код на сервере DAYTIME, например time.nist.gov, или выбрать любой другой из этот список
Обновление . Если ваша конечная цель - установить связь с NTP-сервером (в отличие от игры с сокетами, как вы сказали вначале), вам следует обратиться к Commons Net . Фактически, вы должны посмотреть на его источник в любом случае - Commons Net реализует довольно много сетевых протоколов.