Visual Basic 时间同步



我正在 vb.net 的一个项目中工作,虽然我不是这方面的专家,但我只是使用它,因为 U 认为它是解决此类问题的最佳方法。

我有一个带有两个按钮和一个标签的项目;第一个按钮用于从服务器同步窗口日期,另一个按钮是将窗口日期更改为(2014,11,16(。我这样做是因为除非日期是这个日期,否则我拥有的某些程序无法运行,并且如您所知,浏览器必须是实时运行,这就是这个项目的想法。

第二个按钮工作正常,但同步日期按钮不起作用,并在我的标签中抛出此错误

无连接,因为目标计算机拒绝连接

这是我的功能和我的服务器IP

Public Function GetNISTTime(ByVal host As String) As String
Dim timeStr As String = ""
Try
Dim reader As New StreamReader(New TcpClient(host, 13).GetStream)
LastSysTime = DateTime.UtcNow()
timeStr = reader.ReadToEnd()
reader.Close()
Catch ex As SocketException
GetNISTTime = ex.Message
Exit Function
Catch ex As Exception
GetNISTTime = ex.Message
Exit Function
End Try
'Dim jd As Integer = Integer.Parse(timeStr.Substring(1, 5))
'Dim yr As Integer = Integer.Parse(timeStr.Substring(7, 2))
'Dim mo As Integer = Integer.Parse(timeStr.Substring(10, 2))
'Dim dy As Integer = Integer.Parse(timeStr.Substring(13, 2))
'Dim hr As Integer = Integer.Parse(timeStr.Substring(16, 2))
'Dim mm As Integer = Integer.Parse(timeStr.Substring(19, 2))
'Dim sc As Integer = Integer.Parse(timeStr.Substring(22, 2))
'Dim Temp As Integer = CInt(AscW(timeStr(7)))
Return timeStr ' New DateTime(yr + 2000, mo, dy, hr, mm, sc)
End Function

和按钮

Private Sub real_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles real.Click
GetNISTTime("mail.harf.com.sa")
Label1.Text = GetNISTTime("mail.harf.com.sa").ToString
End Sub

我认为问题是由于服务器,但我没有找到任何成功同步的 dns 服务器。

如果您想用眼睛查看问题,这是我的程序下载链接(您应该以管理员身份运行它(

http://www.mediafire.com/file/wfw5jpag8w2hofb/Release.rar/file

此外,它必须是沙特阿拉伯时区的 dns

您的函数调用不正确。

Private Sub real_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles real.Click
GetNISTTime("mail.harf.com.sa")
Label1.Text = GetNISTTime("mail.harf.com.sa").ToString
End Sub

应该是:

Private Sub real_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles real.Click
Label1.Text = GetNISTTime("mail.harf.com.sa")
End Sub

GetNISTTime是一个返回字符串的函数,所以你原来的第一行(GetNISTTime("mail.harf.com.sa")(可以完成工作,但对返回值什么都不做。原始的第二行采用作为字符串的返回值,然后尝试将其转换为字符串。

此外,如果发生错误,函数可能不会返回任何内容。您已在catch block中使用了 VBA 样式分配。相反,请尝试:

Public Function GetNISTTime(ByVal host As String) As String
Dim timeStr As String = ""
Try
Dim reader As New StreamReader(New TcpClient(host, 13).GetStream)
LastSysTime = DateTime.UtcNow()
timeStr = reader.ReadToEnd()
reader.Close()
Catch ex As SocketException
return ex.Message
Catch ex As Exception
Return ex.Message
End Try
'any other stuff
Return timeStr     
End Function

所以我确实喜欢Visual Vincent所说的,这是我编辑后的代码 它与我完美配合,只需要管理员权限 法典

Imports System.IO
Imports System.Net
Imports System.Net.Sockets
Imports System.Runtime.InteropServices
Public Class Daytime
Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs)
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim d As DateTime
d = "12:52:00"
Try
Microsoft.VisualBasic.TimeOfDay = d 'Your time...
Microsoft.VisualBasic.DateString = New Date(2014, 11, 16) 'The date...
Catch ex As Exception
'You might have to run as Administrator...?
End Try
End Sub
Private Sub real_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles real.Click
Process.Start("CMD", "/C net start w32time & w32tm /resync /force & pause")
End Sub
End Class

最新更新