Foxtable(狐表)用户栏目专家坐堂 → 甜甜老师 获取北京时间代码 有问题


  共有3134人关注过本帖树形打印复制链接

主题:甜甜老师 获取北京时间代码 有问题

帅哥哟,离线,有人找我吗?
hunanwl
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:447 积分:3759 威望:0 精华:0 注册:2012/12/9 8:52:00
甜甜老师 获取北京时间代码 有问题  发帖心情 Post By:2014/9/18 22:28:00 [只看该作者]

 改一下,增加成功率

 

Dim TimeServers As String(,) = New String(2, 1) {}
TimeServers(0, 0) = "time-b.timefreq.bldrdoc.gov"
TimeServers(0, 1) = "132.163.4.102"
TimeServers(1, 0) = "time-c.timefreq.bldrdoc.gov"
TimeServers(1, 1) = "132.163.4.103"
TimeServers(2, 0) = "utcnist.colorado.edu"
TimeServers(2, 1) = "128.138.140.44"

Dim portNum As Integer = 13
Dim hostName As String
Dim bytes As Byte() = New Byte(1023) {}
Dim bytesRead As Integer = 0
Dim client As New System.Net.Sockets.TcpClient()
Dim str1 As String
Dim count As Integer = 0
Do
    For i As Integer = 0 To 2
        hostName = TimeServers(i, 1)
        Try
            client.Connect(hostName, portNum)
            Dim ns As System.Net.Sockets.NetworkStream = client.GetStream()
            bytesRead = ns.Read(bytes, 0, bytes.Length)
            client.Close()
            
            Exit For
        Catch generatedExceptionName As System.Exception
        End Try
    Next
    str1 = System.Text.Encoding.ASCII.GetString(bytes, 0, bytesRead)
    count += 1
Loop While count < 10 AndAlso str1 Is Nothing
Dim sp As Char() = New Char(0) {}
sp(0) = " "c
Dim dt As System.DateTime = New DateTime()

Dim s As String()
s = str1.Split(sp)
dt = System.DateTime.Parse(s(1) & " " & s(2))
'得到标准时间
dt = dt.AddHours(8)
'得到北京时间
Messagebox.show( dt)





看附件

点击获取标准北京时间,上面的标签控件就会显示即使的北京时间  但是多运行几次就会出错啊   说是索引超出数组界限啊

在狐表中是这样

让后我转到vs中  也是这样


甜甜老师   再看下你的代码是什么问题

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/9/18 22:34:00 [只看该作者]

 网络问题,已经写带尝试去连接10次了。

 

 

Dim TimeServers As String(,) = New String(2, 1) {}
TimeServers(0, 0) = "time-b.timefreq.bldrdoc.gov"
TimeServers(0, 1) = "132.163.4.102"
TimeServers(1, 0) = "time-c.timefreq.bldrdoc.gov"
TimeServers(1, 1) = "132.163.4.103"
TimeServers(2, 0) = "utcnist.colorado.edu"
TimeServers(2, 1) = "128.138.140.44"

Dim portNum As Integer = 13
Dim hostName As String
Dim bytes As Byte() = New Byte(1023) {}
Dim bytesRead As Integer = 0
Dim client As New System.Net.Sockets.TcpClient()
Dim str1 As String
Dim count As Integer = 0
Do
    For i As Integer = 0 To 2
        hostName = TimeServers(i, 1)
        Try
            client.Connect(hostName, portNum)
            Dim ns As System.Net.Sockets.NetworkStream = client.GetStream()
            bytesRead = ns.Read(bytes, 0, bytes.Length)
            client.Close()
           
            Exit For
        Catch generatedExceptionName As System.Exception
        End Try
    Next
    str1 = System.Text.Encoding.ASCII.GetString(bytes, 0, bytesRead)
    count += 1
Loop While count < 10 AndAlso str1 Is Nothing
If str1 Is Nothing Then
    msgbox("网络繁忙,请稍后再试")
Else
    Dim sp As Char() = New Char(0) {}
    sp(0) = " "c
    Dim dt As System.DateTime = New DateTime()
   
    Dim s As String()
    s = str1.Split(sp)
    dt = System.DateTime.Parse(s(1) & " " & s(2))
    '得到标准时间
    dt = dt.AddHours(8)
    '得到北京时间
    Messagebox.show( dt)
End If


 回到顶部
帅哥哟,离线,有人找我吗?
hunanwl
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:447 积分:3759 威望:0 精华:0 注册:2012/12/9 8:52:00
  发帖心情 Post By:2014/9/18 22:42:00 [只看该作者]

好的  再试下

你的代码  和他的有什么区别啊

那个代码要好些啊

http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=43142&replyID=274064&skin=1



 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/9/18 22:45:00 [只看该作者]

 没有区别,都一样那个查找的地址多一些,成功率就高一些

 回到顶部
帅哥哟,离线,有人找我吗?
hunanwl
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:447 积分:3759 威望:0 精华:0 注册:2012/12/9 8:52:00
  发帖心情 Post By:2014/9/19 11:18:00 [只看该作者]

还是不行  

不管是把代码作为全局代码  然后调用

还是直接把代码放在按键事件下面

只要你连续点击运行多次  

还是会出现警告:索引超出了数组界限

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/9/19 11:24:00 [只看该作者]

 回复5楼

 

 1、不要经常调用

 

 2、加入判断

 

 

Dim 时间服务器 As String(,) = New String(13, 1) {}
Dim 搜索顺序 As Integer() = New Integer() {3, 2, 4, 8, 9, 6, _
11, 5, 10, 0, 1, 7, _
12}
时间服务器(0, 0) = "time-a.nist.gov"
时间服务器(0, 1) = "129.6.15.28"
时间服务器(1, 0) = "time-b.nist.gov"
时间服务器(1, 1) = "129.6.15.29"
时间服务器(2, 0) = "time-a.timefreq.bldrdoc.gov"
时间服务器(2, 1) = "132.163.4.101"
时间服务器(3, 0) = "time-b.timefreq.bldrdoc.gov"
时间服务器(3, 1) = "132.163.4.102"
时间服务器(4, 0) = "time-c.timefreq.bldrdoc.gov"
时间服务器(4, 1) = "132.163.4.103"
时间服务器(5, 0) = "utcnist.colorado.edu"
时间服务器(5, 1) = "128.138.140.44"
时间服务器(6, 0) = "time.nist.gov"
时间服务器(6, 1) = "192.43.244.18"
时间服务器(7, 0) = "time-nw.nist.gov"
时间服务器(7, 1) = "131.107.1.10"
时间服务器(8, 0) = "nist1.symmetricom.com"
时间服务器(8, 1) = "69.25.96.13"
时间服务器(9, 0) = "nist1-dc.glassey.com"
时间服务器(9, 1) = "216.200.93.8"
时间服务器(10, 0) = "nist1-ny.glassey.com"
时间服务器(10, 1) = "208.184.49.9"
时间服务器(11, 0) = "nist1-sj.glassey.com"
时间服务器(11, 1) = "207.126.98.204"
时间服务器(12, 0) = "nist1.aol-ca.truetime.com"
时间服务器(12, 1) = "207.200.81.113"
时间服务器(13, 0) = "nist1.aol-va.truetime.com"
时间服务器(13, 1) = "64.236.96.53"

Dim portNum As Integer = 13
Dim hostName As String
Dim bytes As Byte() = New Byte(1023) {}
Dim bytesRead As Integer = 0
Dim client As New System.Net.Sockets.TcpClient()
Dim str1 As String
Dim count As Integer = 0
Do
    For i As Integer = 0 To 12
        hostName = 时间服务器(搜索顺序(i), 1)
        Try
            client.Connect(hostName, portNum)
            Dim ns As System.Net.Sockets.NetworkStream = client.GetStream()
            bytesRead = ns.Read(bytes, 0, bytes.Length)
            client.Close()
           
            Exit For
        Catch generatedExceptionName As System.Exception
        End Try
    Next
    str1 = System.Text.Encoding.ASCII.GetString(bytes, 0, bytesRead)
    count += 1
Loop While count < 10 AndAlso str1 Is Nothing
If str1 Is Nothing Then
    msgbox("网络繁忙,请稍后再试")
Else
    Dim sp As Char() = New Char(0) {}
    sp(0) = " "c
    Dim dt As System.DateTime = New DateTime()
   
    Dim s As String()
    s = str1.Split(sp)
    dt = System.DateTime.Parse(s(1) & " " & s(2))
    '得到标准时间
    dt = dt.AddHours(8)
    '得到北京时间
    Messagebox.show( dt)
End If


 回到顶部
帅哥哟,离线,有人找我吗?
hunanwl
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:447 积分:3759 威望:0 精华:0 注册:2012/12/9 8:52:00
  发帖心情 Post By:2014/9/19 11:56:00 [只看该作者]

还是一样的

我觉得应该是代码有问题  呵呵

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/9/19 11:58:00 [只看该作者]

 不可能报错,6楼代码报什么错?

 回到顶部
帅哥哟,离线,有人找我吗?
hunanwl
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:447 积分:3759 威望:0 精华:0 注册:2012/12/9 8:52:00
  发帖心情 Post By:2014/9/19 15:49:00 [只看该作者]

问题解决了

Dim 搜索顺序 As Integer() = New Integer() {3, 2, 4, 8, 9, 6, _
11, 5, 10, 0, 1, 7, _
12}

这个是什么意思呢   为什么有一横杠呢   是上下行连接符号码   
还有  为什么没有13 呢

服务器有13啊

时间服务器(13, 0) = "nist1.aol-va.truetime.com"
时间服务器(13, 1) = "64.236.96.53"
[此贴子已经被作者于2014-9-19 15:49:57编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/9/19 15:57:00 [只看该作者]

 可以随便指定,根据实际情况排序即可

 

Dim 搜索顺序 As Integer() = New Integer() {3, 2, 4, 8, 9, 6, 11, 5, 10, 0, 1, 7, 12, 13}


 回到顶部