当前位置:编程学习 > VB >>

获取不到网络时间,请大家帮忙看看代码,谢谢

如题,大侠们帮我看看,怎么获取不到网络时间,谢谢!

代码如下:

 '定义全局变量vTime,存放从服务器获得的时间
    Dim vTime As String
    

    '从网络时间服务器获得标准时间

    Private Sub Command1_Click()

    If Winsock1.State <> sckClosed Then

    Winsock1.Close '如果不是则关闭连接

    End If

    '设置远程时间服务器地址以及端口

    Winsock1.RemoteHost = "tick.usno.navy.mil"  '美国海军天文台

    Winsock1.RemotePort = 13

    Winsock1.Connect '连接远程服务器
    

    End Sub

    '设置系统时间

    Private Sub Command2_Click()

    Dim sTime As Date '定义局部变量sTime

    '从服务器返回的字符中取出时间,由于是格林尼治时间所以要加8
    

    sTime = LTrim$(Str$(Val(Mid$(vTime, 12, 2)) + 8) & Mid$(vTime, 14, 6))

    Text1.Text = sTime '显示转换后的时间

    'Time = sTime '设置系统时间

    End Sub


    '当服务器返回数据时执行

    Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)

    Winsock1.GetData vTime '将服务器返回的时间存入vTime

    Text1.Text = vTime  '在文本框中显示时间

    End Sub



    '获得时间后关闭当前连接

    Private Sub Winsock1_Close()

    Winsock1.Close

    End Sub
winsock 网络时间 --------------------编程问答-------------------- 域名组织

    time.nist.gov NIST

    tick.usno.navy.mil 美国海军天文台

    clock.sgi.com SGI

    tick.mit.edu 麻省理工学院

    (MIT)

    ntp1.uk.uu.net 剑桥大学

    usno.pa-x.dec.com Compaq

    ntp-cup.external.hp.com HP  --------------------编程问答-------------------- 我换了好几个都不行,不知为什么 --------------------编程问答-------------------- 用这个获取,对方1个  hook就全改了,想办法用其他协议获取吧 --------------------编程问答--------------------



引用 3 楼 wowfiowow 的回复:
用这个获取,对方1个  hook就全改了,想办法用其他协议获取吧


你有什么好的推荐吗?谢谢了! --------------------编程问答-------------------- 既然用winsock,为什么不发送一个随便的数据包,然后从返回的包头里面截获服务器时间呢?


(即使你发送一个错误包,服务器会返回一个错误,其包头里面就含有服务器时间…秒级精度还是有的…) --------------------编程问答-------------------- 除 --------------------编程问答--------------------
引用 5 楼 yiguangqiang88 的回复:
既然用winsock,为什么不发送一个随便的数据包,然后从返回的包头里面截获服务器时间呢?


(即使你发送一个错误包,服务器会返回一个错误,其包头里面就含有服务器时间…秒级精度还是有的…)


 我还真不知道如何写这个程序,请高手支招,谢谢!!! --------------------编程问答-------------------- 除 --------------------编程问答-------------------- Function GetInternetDate() As String
    On Error Resume Next
    Dim objXML As Object, strTemp$, netDate As Date, netTime As Date
    Set objXML = CreateObject("WinHttp.WinHttpRequest.5.1")
    With objXML
        .Option(6) = 0
        .Open "GET", "http://www.timedate.cn/worldclock/ti.asp?CFG", False
        .setRequestHeader "Connection", "Keep-Alive"
        .send
        strTemp = .responseText
    End With
    Dim nYear$, nMonth$, nday$, nHrs$, nMin$, nSec$
    nYear = Val(Split(Split(strTemp, "nyear=", -1, vbTextCompare)(1), ";", -1, vbTextCompare)(0))
    nMonth = Val(Split(Split(strTemp, "nmonth=", -1, vbTextCompare)(1), ";", -1, vbTextCompare)(0))
    nday = Val(Split(Split(strTemp, "nday=", -1, vbTextCompare)(1), ";", -1, vbTextCompare)(0))
    nHrs = Val(Split(Split(strTemp, "nhrs=", -1, vbTextCompare)(1), ";", -1, vbTextCompare)(0))
    nMin = Val(Split(Split(strTemp, "nmin=", -1, vbTextCompare)(1), ";", -1, vbTextCompare)(0))
    nSec = Val(Split(Split(strTemp, "nsec=", -1, vbTextCompare)(1), ";", -1, vbTextCompare)(0))
    netDate = DateSerial(nYear, nMonth, nday)
    netTime = TimeSerial(nHrs, nMin, nSec)
    If nYear = 0 Then
        GetInternetDate = ""
    Else
        GetInternetDate = CDate(netDate + netTime)
    End If
End Function --------------------编程问答--------------------
引用 5 楼 yiguangqiang88 的回复:
既然用winsock,为什么不发送一个随便的数据包,然后从返回的包头里面截获服务器时间呢?


(即使你发送一个错误包,服务器会返回一个错误,其包头里面就含有服务器时间…秒级精度还是有的…)


这样不准的。。。。。。。。。。以前用过,被害惨了 --------------------编程问答--------------------
引用 10 楼 wowfiowow 的回复:
这样不准的。。。。。。。。。。以前用过,被害惨了
哪个服务器那么变态?说出来我试试。
该不是不会转换时区吧? --------------------编程问答-------------------- 顶!支持~~~~~~~~~ --------------------编程问答--------------------
引用 11 楼 yiguangqiang88 的回复:
引用 10 楼 wowfiowow 的回复:这样不准的。。。。。。。。。。以前用过,被害惨了哪个服务器那么变态?说出来我试试。
该不是不会转换时区吧?


转换时区???呵呵,你就懂这些吗?这些我都知道哦! --------------------编程问答-------------------- 无测试无真相……俺就会点时区转换之类的,不要笑话俺 --------------------编程问答-------------------- net time /set --------------------编程问答-------------------- 除
补充:VB ,  网络编程
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,