• 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_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


    測试本机


    root@ubuntu:/home/jiang/UNP_STUDY/unpv13e/intro# ./daytimetcpcli 127.0.0.1
    


    结果为:


    24 OCT 2014 00:39:36 CST


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

                可能的主机列表例如以下,就是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



    换个server

    dig time.nist.gov
    ./daytimetcpcli 128.138.141.172
    

    结果

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


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



  • 相关阅读:
    html单引号,双引号转义
    把文章里边的html标签去掉(去掉文字的样式,显示css设置的样式)
    java缓存适合使用的情况
    Java内存缓存
    springmvc怎么重定向,从一个controller跳到另一个controller
    jquery 获取标签名(tagName)
    jQuery判断checkbox是否选中的3种方法
    判断一组checkbox中是否有被选中的
    在O(N)时间内求解 正数数组中 两个数相加的 最大值
    两种方法求解 正数数组中 两个数相减 的最大值
  • 原文地址:https://www.cnblogs.com/jzssuanfa/p/6849134.html
Copyright © 2020-2023  润新知