Visual Basic синхронизация времени - PullRequest
0 голосов
/ 14 октября 2018

Я работаю над проектом на vb.net, хотя я не являюсь экспертом в этом, я просто использовал его, потому что вы думаете, что он лучший для такого рода проблем.

У меня есть проект сдве кнопки и метка;Первая кнопка предназначена для синхронизации даты Windows с сервера, а вторая - для изменения даты Windows на (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

Также это должен быть днс в Саудовской АравииЧасовой пояс Аравии

Ответы [ 2 ]

0 голосов
/ 14 октября 2018

так что мне понравилось то, что сказал 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
0 голосов
/ 14 октября 2018

Ваш вызов функции неправильный.

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 - это функция, которая возвращает строку, поэтому ваша первая строка (* 1008)*) выполняет работу, но с возвращаемым значением ничего не делается.Ваша исходная вторая строка принимает возвращаемое значение, которое является строкой, а затем пытается преобразовать ее в строку.

Кроме того, ваша функция может ничего не возвращать в случае возникновения ошибки.Вы использовали назначение стиля VBA в catch block.Вместо этого попробуйте:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...