Ich habe ein Stück Code, der eine Liste der NIST-Server pingt und die Zeit, die sie haben, abruft. Dies ist der ursprüngliche Code, das funktioniert perfekt:Probleme mit Strings, Arrays und IP-Adressen haben (VB.NET)
'Server IP addresses from
'http://tf.nist.gov/tf-cgi/servers.cgi - current as of 05/20/2016
Private Shared Servers() As String = {
"129.6.15.28" _
, "129.6.15.29" _
, "129.6.15.30" _
, "98.175.203.200" _
, "66.199.22.67" _
, "64.113.32.5" _
, "198.111.152.100" _
, "216.229.0.179" _
, "24.56.178.140" _
, "132.163.4.101" _
, "132.163.4.102" _
, "132.163.4.103" _
, "128.138.140.44" _
, "128.138.141.172" _
, "198.60.73.8" _
, "131.107.13.100" _
, "216.228.192.69"
}
Public Shared LastHost As String = ""
Public Shared LastSysTime As DateTime
Public Shared Function GetTime() As DateTime
'Returns UTC/GMT using an NIST server if possible,
' degrading to simply returning the system clock
'If we are successful in getting NIST time, then
' LastHost indicates which server was used and
' LastSysTime contains the system time of the call
' If LastSysTime is not within 15 seconds of NIST time,
' the system clock may need to be reset
' If LastHost is "", time is equal to system clock
Dim host As String
Dim result As DateTime
LastHost = ""
For Each host In Servers
Try
If My.Computer.Network.Ping(host) Then
LastHost = host
result = GetNISTTime(host)
End If
Catch ex As Exception
MsgBox("There was an error retrieving the internet time. Please try again.", MsgBoxStyle.Exclamation, "Sync Error")
End Try
Next
If LastHost = "" Then
'No server in list was successful so use system time
result = DateTime.UtcNow()
End If
Return result
End Function
aber ich versuche, es zu ändern, so kann ich eine Liste von NIST-Server IP-Adressen in einem My.Settings oder My.Resources stattdessen Datei gespeichert verwenden (so Ich kann die I Adressen leicht ändern). Also gehen Sie einfach jede Zeile genau wie oben beschrieben. Außer dem folgenden Code funktioniert nicht wie der obige Code; es gibt nur etwas entlang der Linien von „System.Strings []“:
'Server IP addresses from
'http://tf.nist.gov/tf-cgi/servers.cgi - current as of 05/20/2016
'Declares stting that loads server IP addresses
Public Shared VanServ As String = My.Resources.VanillaServerIPList
Public Shared Serv As String = My.Settings.ServerIPList
Public Shared Servers() As String
Public Shared LastHost As String = ""
Public Shared LastSysTime As DateTime
Public Shared Function GetTime() As DateTime
'Returns UTC/GMT using an NIST server if possible,
' degrading to simply returning the system clock
'If we are successful in getting NIST time, then
' LastHost indicates which server was used and
' LastSysTime contains the system time of the call
' If LastSysTime is not within 15 seconds of NIST time,
' the system clock may need to be reset
' If LastHost is "", time is equal to system clock
Servers = Serv.Split(vbCrLf)
Dim host As String
Dim result As DateTime
LastHost = ""
For Each host In Servers
Try
If My.Computer.Network.Ping(host) Then
LastHost = host
result = GetNISTTime(host)
End If
Catch ex As Exception
MsgBox("There was an error retrieving the internet time. Please try again.", MsgBoxStyle.Exclamation, "Sync Error")
End Try
Next
If LastHost = "" Then
'No server in list was successful so use system time
result = DateTime.UtcNow()
End If
Return result
End Function
Die My.Resources.VanillaServerIPList und My.Settings.ServerIPList wie folgt aussehen (und bevor Sie sagen, zu überprüfen, ob die Listen null sind , beide Listen in der Tat haben die folgenden Werte enthalten):
129.6.15.28
129.6.15.29
129.6.15.30
98.175.20 3,200
66.199.22.67
64.113.32.5
198.111.152.100
216.229.0.179
... und so weiter; jeder IP ist auf einer neuen Zeile
die Programmiersprache sind Sie mit? besser zu den Tags hinzufügen ... – alfasin
Oh mein Schlechter. Ich benutze VB.NET –
Sind Sie sicher, dass es eine Zeichenfolge "System.Strings []" zurückgibt? Es ist ein DateTime-Objekt, keine Zeichenfolge. Sieht wie der Standard ToString() in einer Liste von Zeichenfolgen aus. Um dieses Programm zu debuggen, drucken Sie jeden String innerhalb der Schleife, um zu sehen, was er tatsächlich verwendet. Wenn es immer noch nicht funktioniert, können Sie den viel einfacheren Code ohne Netzwerkcode posten. Es wird leichter für die Leute zu verstehen sein. – user1318499