Я пытаюсь захватить метку времени с сервера nist.gov, используя приведенный ниже код.DatagramPacket getData() не работает
InetAddress addr = InetAddress.getByName("129.6.15.30");
DatagramSocket s = new DatagramSocket();
System.out.println("Connected to: "+addr.getHostName());
byte[] buf = new byte[4];
DatagramPacket p = new DatagramPacket(buf, buf.length, addr, 37);
s.send(p);
System.out.println("message sent");
DatagramPacket dp = new DatagramPacket(buf, buf.length);
s.receive(dp);
String data = new String(dp.getData(), 0, dp.getLength());
System.out.println("Received: "+data);
Когда я запускаю это на Eclipse, я возвращаю обратно в консоль.
Connected to: time-c.nist.gov
message sent
Received: ÛÏÌ<
Хорошая новость: я подключаюсь к правильному серверу и получаю обратно пакет. Однако я просто не могу превратить данные этого пакета в приемлемое представление этих данных. Что мне не хватает?
Это определенно помогло, так как мой новый полученный результат получил: -607100146. Теперь, чтобы выяснить, как преобразовать это в метку времени стандартного формата. – MPeal
Добавлено преобразование в 'Instant' –
Спасибо, Грег, так как это сработало, и я получил следующий вывод на мгновение: 2016-11-11T18: 27: 50Z. И хотя я благодарю вас за этот ответ, я не хочу просто говорить: «Отлично! Этот парень сделал это для меня!» Мне любопытно, что означает «L» после 2208988800. Я понимаю, что 2208988800 - это количество секунд между 1/1/1900 и 1/1/1970, но что такое L (простите меня, я только кодирование на Java в течение 4,5 месяцев, и небольшие детали, подобные этому, иногда меня избегают). – MPeal