zoukankan      html  css  js  c++  java
  • 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点钟.



  • 相关阅读:
    软件概要设计
    项目文件-搭建工程
    select标签中设置只读几种解决方案
    PHP ob缓冲区函数的使用
    laravel笔记
    ubuntu系统更新命令
    RBAC权限控制系统
    laravel 数据库获取值的常用方法
    php中获取数据 php://input、$_POST与$GLOBALS['HTTP_RAW_POST_DATA']三者的区别
    php 文件上传 $_FILES 错误码
  • 原文地址:https://www.cnblogs.com/jzssuanfa/p/6849134.html
Copyright © 2011-2022 走看看