我想在套接字客户端上进行时间请求。根据这time.nist.gov 位于端口 13
time.google.com 是否有类似的服务,以便我可以将套接字客户端连接到它。就像我可以通过端口 13 连接到 time.nist.gov 一样
我想做这样的事
import java.net.*;
import java.io.*;
/**
* This program is a socket client application that connects to a time server
* to get the current date time.
*
* @author www.codejava.net
*/
public class TimeClient {
public static void main(String[] args) {
String hostname = "time.google.com";
int port = 13;
try (Socket socket = new Socket(hostname, port)) {
InputStream input = socket.getInputStream();
InputStreamReader reader = new InputStreamReader(input);
int character;
StringBuilder data = new StringBuilder();
while ((character = reader.read()) != -1) {
data.append((char) character);
}
System.out.println(data);
} catch (UnknownHostException ex) {
System.out.println("Server not found: " + ex.getMessage());
} catch (IOException ex) {
System.out.println("I/O error: " + ex.getMessage());
}
}
}
答案1
如果他们提供白天服务,那么它将在 13 号港口。但白天古老充其量,今天几乎没有任何合法用途。time.nist.gov
可能出于过时的原因而提供它。
而谷歌则倾向于推行新标准,并迅速放弃不良标准。Daytime 就是一个不良标准的例子,它已被更好的标准所取代:ntp。
我找不到任何文档暗示谷歌支持白天,并且time.google.com
不响应端口 13。所以他们可能根本不支持白天。
你应该不是在新的开发中完全不使用白天。这是一个不经常使用的协议,并且将要消失。使用 ntp 或 sntp。每个可以想象到的平台都有 sntp 或 ntp 库。
如果你担心 ntp 库会带来开销,那么你应该真的阅读白天规格- 这是 1983 年的!哎呀!
Daytime Syntax
There is no specific syntax for the daytime. It is recommended that
it be limited to the ASCII printing characters, space, carriage
return, and line feed. The daytime should be just one line.
One popular syntax is:
Weekday, Month Day, Year Time-Zone
Example:
Tuesday, February 22, 1982 17:37:43-PST
他们还指出time
是一种更好的协议。Time 以机器可读的格式发送时间:自 1900-01-01 12:00:00 以来的秒数。不完全是琐碎的将其转化为今天的日期也是不可能,所以你很可能需要一个图书馆。但time
在过去 20 年里没有人使用过,所以这样的图书馆可能很少。
另一方面,NTP...