Ubuntu利用TCP协议来获取服务器时间

Linux利用TCP协议来获取服务器时间

这里使用Unix网络编程里面的一个小程序,该客户端建立一个到服务器的TCP连接,然后读取由服务器以直观可读格式简单地送回的当前时间和日期.

#include	"unp.h"

int main(int argc, char **argv)
{
	int					sockfd, n;
	char				recvline[MAXLINE + 1];
	struct sockaddr_in	servaddr;

	if (argc != 2)
		err_quit("usage: a.out <IPaddress>");

	if ( (sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
		err_sys("socket error");

	bzero(&servaddr, sizeof(servaddr));
	servaddr.sin_family = AF_INET;
	servaddr.sin_port   = htons(13);	/* daytime server */
	if (inet_pton(AF_INET, argv[1], &servaddr.sin_addr) <= 0)
		err_quit("inet_pton error for %s", argv[1]);

	if (connect(sockfd, (SA *) &servaddr, sizeof(servaddr)) < 0)
		err_sys("connect error");

	while ( (n = read(sockfd, recvline, MAXLINE)) > 0) {
		recvline[n] = 0;	/* null terminate */
		if (fputs(recvline, stdout) == EOF)
			err_sys("fputs error");
	}
	if (n < 0)
		err_sys("read error");

	exit(0);
}

然后我们运行这个程序若干次,每次以不同的IP地址作为命令行参数.

首先我们测试本机的时间,你必须要先打开Linux下的daytime服务,方法如下

sudo apt-get install xinetd
sudo vi /etc/xinetd.d/daytime

找到这一行,然后把yes改成no    (disable = yes)  -> (disable = no)

sudo /etc/init.d/xinetd restart

测试本机

[email protected]:/home/jiang/UNP_STUDY/unpv13e/intro# ./daytimetcpcli 127.0.0.1

结果为:

24 OCT 2014 00:39:36 CST

那么要想测试互联网上服务器的daytime,首先得找到支持用TCP协议返回时间的服务器.测试了一些可能的主机,发现有一些可以返回,一些超时或者拒绝访问。

可能的主机列表如下,就是windows下右下角时间同步的那个列表。

这里使用dig指令来解析域名

dig time.windows.com +short

time.microsoft.akadns.net.

64.4.10.33

运行程序尝试获取时间

./daytimetcpcli 64.4.10.33

第一次

connect error: Connection timed out

第二次

connect error: Connection refused

换个服务器

dig time.nist.gov
./daytimetcpcli 128.138.141.172

结果

56953 14-10-23 16:46:39 11 0 0   0.0 UTC(NIST) *

可以看直观的看出来,当地的时间为下午4点钟.

时间: 2024-12-28 23:33:44

Ubuntu利用TCP协议来获取服务器时间的相关文章

Ubuntu利用TCP协议来获取server时间

Linux利用TCP协议来获取server时间 这里使用Unix网络编程里面的一个小程序,该client建立一个到server的TCP连接,然后读取由server以直观可读格式简单地送回的当前时间和日期. #include "unp.h" int main(int argc, char **argv) { int sockfd, n; char recvline[MAXLINE + 1]; struct sockaddr_in servaddr; if (argc != 2) err_

通过AFNetworking获取服务器时间

在一些场合,我们需要获取服务器的时间,计算该时间与客户端本地时间的差值,以利于时间同步.有人说,这个不是很简单吗,让后台的TX给你一个获取服务器时间的接口就行了. 其实这个还是比较麻烦的,更简单的是利用HTTP Header来获取服务器时间--每个HTTP header的Date参数就是这个时间.在iOS中我们通常用AFNetworking发请求,那么用AFNetworking怎么得到HTTP header信息呢? 很简单,用 [[operation response] allHeaderFie

利用TCP协议实现通信

Socket的TCP通讯 一. socket的通讯原理 服务器端的步骤如下. (1)建立服务器端的Socket,开始侦听整个网络中的连接请求. (2)当检测到来自客户端的连接请求时,向客户端发送收到连接请求的信息,并建立与客户端之间的连接. (3)当完成通信后,服务器关闭与客户端的Socket连接. 客户端的步骤如下. (1)建立客户端的Socket,确定要连接的服务器的主机名和端口. (2)发送连接请求到服务器,并等待服务器的回馈信息. (3)连接成功后,与服务器进行数据的交互. (4)数据处

python3实现TCP协议的简单服务器和客户端

利用python3来实现TCP协议,和UDP类似.UDP应用于及时通信,而TCP协议用来传送文件.命令等操作,因为这些数据不允许丢失,否则会造成文件错误或命令混乱.下面代码就是模拟客户端通过命令行操作服务器.客户端输入命令,服务器执行并且返回结果. TCP(Transmission Control Protocol 传输控制协议):是一种面向连接的.可靠的.基于字节流的传输层通信协议,由IETF的RFC 793定义. TCP客户端 from socket import * host = '192

Unity 获取服务器时间 HTTP请求方式

在写每日签到的时候,我居然使用的是本地时间...被项目经理笑哭了...., 如果你在写单机游戏,没有游戏服务器,但又不想使用本地时间,就可以采用下面方法. 方法总结: 1. 使用HTTP请求获取服务器时间,不能实时获取服务器时间这样高频率的 2. 使用socket可以实时获取服务器时间 3. 使用C#自带API获取sql server 标准北京时间(=.=还没有找到这个API) 第HTTP方式: 代码: using UnityEngine; using System.Collections; u

如何在Windows系统上利用Telnet协议连接Linux服务器

Telnet协议是Internet远程登录服务的标准协议,它为用户提供了在本地计算机上完成远程主机工作的能力.很多终端使用者都习惯在计算机上利用Telnet会话来远程控制服务器.这里小编就分两步为大家演示如何在Windows系统上利用Telnet协议连接Linux服务器. 步骤一:在Windows系统上打开Telnet功能:  步骤二:在Linux系统上启用Telnet服务. 步骤一:Windows终端开启Telnet功能 1/由于在Windows Vista之后的版本默认并没有提供Telnet

jsp页面获取服务器时间

Calendar c = Calendar.getInstance(); int year = c.get(Calendar.YEAR); int month = c.get(Calendar.MONTH); int day= c.get(Calendar.DAY);   这三行加在<%   %>里面 调用时用<%= year  %><%= month%><%= day%> jsp页面获取服务器时间

动态获取服务器时间

最近在做的这个项目要获取到后台的数据,然后使用html5绘制曲线,以前都是在自己电脑上使用没有发现有什么不正常的地方,昨天连接同事的服务器发现有段数据怎么都对不上了,开始我还以为程序有问题呢,找了半天结构发现是我的电脑时间和同事的电脑时间对不上导致的.既然发现了问题下面就是找出解决办法了. 实际上最好的解决办法是固定客户端的时间,不然修改,但你会发现这个不可能的.所以只有找其他方式的.再有就是获取服务器时间然后同步到客户端了.实际上这个游戏三种方式可行. 1.既然是动态获取就每秒获取一次,这样能

小案例 - 获取服务器时间

1. GetTime.html 1 <!DOCTYPE html> 2 <html xmlns="http://www.w3.org/1999/xhtml"> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 5 <title></title> 6 <scri