- 热门文章:
- · Linux中文件查找方法大全
- · 黑客俘获计算机的攻击方法和防御详解
- · 战胜垃圾邮件的七种武器 邮箱“减肥”良药
- · CVE—公共漏洞和暴露
- · 如何关闭常见木马和未授权控制软件
- · Linux环境下的高级隐藏技术
- · 安全问答:网络钓鱼是什么意思
- · Window 消息大全使用详解
- · 通信网络安全分层及关键技术解决
- · win2000进程一览
- · SMTP命令简介
- · 优秀网管心得三则
上一篇:卡巴斯基杀毒软件优化设置指南 >>
浅谈网络时间校正原理及实践运用
首先介绍一下网络对表的原理。网络上存在很多叫做“授时服务器”的主机,它们负责提供精确的时间,一般是由原子钟产生的。因此,我们只要做一个小程序来与授时服务器通信并按照其返回的准确时间来调整本机时间就可以了。
其中rfc组织为网络时间协议规定了几个不同版本:
daytime协议:这是以ascii字符传递时间信息的一种协议。参见rfc0867。
time协议:这是以32位整数传递时间信息的一种协议。参见rfc0868。
simple network time协议:这是一种更加精确的传递时间信息的协议。参见rfc1769。
你可以在http://rfc.linuxforum.net/找到相关rfc协议。
这几个协议各有优点,daytime协议最简单,最直观,但规范不统一,只适合人脑阅读;time协议也非常简单,但更适合用程序来统一处理;simple network time协议比较复杂,但精度非常高。下面我将主要介绍一下time协议的实现与应用。
time协议中与授时服务器的通信是非常简单的:
screen.width-300)this.width=screen.width-300 border=0 alt=click to open in new window>
其中“连接”是指连接到服务器的37端口(tcp或udp方式均可,这里我们将选用tcp方式)。其中“时间信息”是一个4字节长的整数,定义如下:它表示自从gmt 0时区1900年1月1日午夜00:00开始到现在所经过的秒数。不过这个时间是以本初子午线处的时间为标准的。为了获得本地时间,我们还要按时区进行修正。例如,中国处于东八区,所以要把获得的时间加上8小时。当时间信息返回后,服务器将主动关闭这个连接。
下面我们就用c#实现这个程序了。新建一个叫timesync的c# windows应用程序工程。其中form1改名为frmmain。在frmmain代码前插入:
using system.threading; //需要使用多线程
using system.net; //需要使用网络
using system.net.sockets; //需要使用网络
//需要调用api来设置系统时间。
//笔者曾经想通过c#的类库来修改系统时间,但一直没有实现。
//希望熟悉这方面的朋友指点一下。
using system.runtime.interopservices;
class win32api
{
[dllimport("kernel32.dll")]
public static extern int setlocaltime (ref systemtime lpsystemtime);
}
public struct systemtime
{
public short wyear;
public short wmonth;
public short wdayofweek;
public short wday;
public short whour;
public short wminute;
public short wsecond;
public short wmilliseconds;
}
主代码:
public class frmmain : system.windows.forms.form
{
////省略自动生成的代码
////……………
thread thrtimesync;
private void timesyncproc()
{
while(true)
{
tcpclient c = new tcpclient();
c.connect("www.time.ac.cn", 37); //连接到国内授时服务器
networkstream s;
s = c.getstream(); //读取数据流
c.close();
byte []buf = new byte[4];
s.read(buf,0,4); //把数据存到数组中
uint ltime;
//把服务器返回数据转换成1900/1/1 utc 到现在所经过的秒数
ltime = ((uint)buf[0]
()
下一篇:Linux中文件查找方法大全 >>
相关文章:
- · 防火墙进化进行时
- · 杀毒技巧系列:杀毒、防恶意代码、脚本病毒的不完全合集
- · N款教程,款款精品
- · windows XP 系统服务“关闭”详细列表,释放N多内存
- · Linux尝鲜[50M的Linux]
- · socket简易入门手册
- · Java学习从入门到精通
- · asp.dll解析成system提升权限
- · 企业无线局域网安全防护
- · IP地址与域名详解
- · Windows XP 的 TCP/IP 和 NBT 配置参数
- · 10招秘技快捷方式用得顶呱呱
- · 用户访问管理系统完备功能详解
- · SQL Server防范措施
- · 使用LINUX系统DDOS攻击WINDOWS服务器
- · 两妙招“强行”杀死病毒进程
- · 最大限度的避免垃圾邮件
- · 保护爱机 慎用六大软件伤硬盘
- · 病毒杀不死的原因分析和相应对策
- · cs的优化--网络端设置
- · 92个经典开源项目集锦(包括URL)
- · 开放源代码知识大全
- · 电脑降噪全攻略之光驱篇
- · 微软IE主内火狐主外 安全评测深度分析报告
- · 补丁刚打完Office再现高危漏洞
- · 初探FreeBSD与Linux的预处理机制
- · 巧用 Windows 系统控制台删除病毒文件
- · JAVA代码编写的30条建议
- · 让你的WinXP 和Win98一样快
- · 利用传感器监测服务器机房
- · 去除pdf文件“打印”“拷贝”限制
- · 完全破解灰鸽子成为会员
- · SPARC中如何安装Linux系统
- · Windows XP四则最新应用技巧
- · 无盘 破的就是你
- · 轻松配置多出口网络的秘密
- · Windows系统服务优化别过头
- · IP地址与子网的划分
