Соединение с сервером NTP продолжает терпеть неудачу (Java)

StackOverflow https://stackoverflow.com/questions/1225391

  •  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 реализует довольно много сетевых протоколов.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top