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点钟.

Ubuntu利用TCP协议来获取server时间的更多相关文章

  1. 高并发服务器建议调小 TCP 协议的 time_wait 超时时间。

    1. [推荐]高并发服务器建议调小 TCP 协议的 time_wait 超时时间. 说明:操作系统默认 240 秒后,才会关闭处于 time_wait 状态的连接,在高并发访问下,服 务器端会因为处于 ...

  2. 动态获取server时间

    近期在做的这个项目要获取到后台的数据.然后使用html5绘制曲线.曾经都是在自己电脑上使用没有发现有什么不正常的地方,昨天连接同事的server发现有段数据怎么都对不上了,開始我还以为程序有问题呢,找 ...

  3. 利用TCP协议,实现基于Socket的小聊天程序(初级版)

    TCP TCP (Transmission Control Protocol)属于传输层协议.其中TCP提供IP环境下的数据可靠传输,它提供的服务包括数据流传送.可靠性.有效流控.全双工操作和多路复用 ...

  4. 高并发服务器建议调小 TCP 协议的 time_wait 超时时间

    说明:操作系统默认 240 秒后,才会关闭处于 time_wait 状态的连接,在高并发访问下,服 务器端会因为处于 time_wait 的连接数太多,可能无法建立新的连接,所以需要在服务器上 调小此 ...

  5. 在网络7层协议中,如果想使用UDP协议达到TCP协议的效果,可以在哪层做文章?(QQ 为什么采用 UDP 协议,而不采用 TCP 协议实现?)

    为了解决这题,可以具体看看下面这个讨论. 解灵运工程师 185 人赞同 某次架构师大会上那个58同城做即时通信的人说:原因是因为当时没有epoll这种可以支持成千上万tcp并发连接的技术,所以他们使用 ...

  6. Linux下tcp协议socket的recv函数返回时机分析(粘包)

    http://www.vckbase.com/index.php/wv/10http://blog.csdn.net/zlzlei/article/details/7689409 文章一: 当前在网络 ...

  7. 从TCP三次握手说起–浅析TCP协议中的疑难杂症(2)

    版权声明:本文由黄日成原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/108 来源:腾云阁 https://www.qclo ...

  8. 面试题总结(一)、TCP协议

    声明:本文主要探讨当TCP协议出现在面试笔试场合可能会涉及的问题,每一个知识点讨论力求简洁,便于记忆,但讨论深度有限,如要深入研究可点击参考链接,希望对正在找工作的同学有点帮助. 一.TCP协议简介 ...

  9. 浅析TCP协议---转载

    https://cloud.tencent.com/developer/article/1150971 前言 说到TCP协议,相信大家都比较熟悉了,对于TCP协议总能说个一二三来,但是TCP协议又是一 ...

随机推荐

  1. javascript的prototype经典使用场景

    prototype的经典使用场景就是为对象增加属性和方法,如给自定义的Man对象增加个姓名属性和语言方法: function man() {        this.age = "22&qu ...

  2. DTD DOCTYPE

    总结: DOCTYPE是什么 ? 文档类型声明,告诉解析器用什么样的文档类型定义来解析此文档.DOCTYPE不存在或格式不正确会导致文档以兼容模式呈现.   标准模式与兼容模式各有什么区别? 如果页面 ...

  3. idea cannot download sources解决办法

    当我们点击Download Sources时: 有时候idea会出现cannot download sources的情况,如下图 解决办法如下:打开idea右下角的terminal 在里面输入 mvn ...

  4. 一次ORA-01555问题分析,及SQL优化。

    前言 客户说: 我在数据库上继续运行昨日的脚本,但发现有个子过程在运行10个小时后报错: 烦请协助看看... 错误码是:ORA-01555: snapshot too old: rollback se ...

  5. Excel OLE控制

    来源:http://blog.csdn.net/chelen_jak/article/details/7069095 Delphi  控制Excel(一) 使用动态创建的方法 首先创建 Excel 对 ...

  6. Python之粘包

    Python之粘包 让我们基于tcp先制作一个远程执行命令的程序(1:执行错误命令 2:执行ls 3:执行ifconfig) 注意注意注意: res=subprocess.Popen(cmd.deco ...

  7. Python关于函数作为返回值的理解(3分钟就看完了)

    话不多说,直接看例子,上代码: def line_conf(): def line(x): return 2 * x + 1 return line #return a function object ...

  8. Numpy第一课

    import numpy as np a = np.array([1,2,3]) print(a) # [1 2 3] a2 = np.array([[1, 2], [3, 4]]) print('a ...

  9. Unity 3D 使用TerrainCompose 调用RTP 报错:

    Unity 3D:5.2 version TerrainCompose:1.92 version RTP:3.2d version Unity 3D  使用TerrainCompose 调用RTP 报 ...

  10. Qt5笔记之数据库(五)SQL表格模型QSqlTableModel

    教程网址:http://www.qter.org/portal.php?mod=view&aid=57 0.打开tablemodel.pro文件,加上: QT += coregui sql 注 ...