Asp.net 我可以按特定顺序ping站点列表吗?
下午好, 我正在用VB编写我的第一个控制台应用程序。我正在开发的应用程序本质上是ping一个网站列表,然后写出状态 我的问题如下 有没有一种方法可以让我订购我希望在VB中ping的网站。目前,我只是列出了这些,不管我以什么顺序在ping命令中写入这些站点,似乎都会收回写入最快repsonce的状态。问题是,我有几个网站位于同一个网络框中,在写状态信息时,状态信息似乎乱七八糟。我认为这是因为他们有相同的响应时间 请找到我一直在使用的代码Asp.net 我可以按特定顺序ping站点列表吗?,asp.net,vb.net,visual-studio-2010,console-application,ping,Asp.net,Vb.net,Visual Studio 2010,Console Application,Ping,下午好, 我正在用VB编写我的第一个控制台应用程序。我正在开发的应用程序本质上是ping一个网站列表,然后写出状态 我的问题如下 有没有一种方法可以让我订购我希望在VB中ping的网站。目前,我只是列出了这些,不管我以什么顺序在ping命令中写入这些站点,似乎都会收回写入最快repsonce的状态。问题是,我有几个网站位于同一个网络框中,在写状态信息时,状态信息似乎乱七八糟。我认为这是因为他们有相同的响应时间 请找到我一直在使用的代码 'Imports ping class Imports Sy
'Imports ping class
Imports System.Net.NetworkInformation
Module Module1
Sub Main()
Console.Title = ("Daily Checks PING to Check Current Status")
Dim myPingList As New List(Of String) 'A LIST TO HOLD SOME STRINGS
Dim myPing As Ping = Nothing 'PING CLASS
Dim timeout As Integer = 100000 'TIMEOUT FOR PING REQUESTS
'ADD A BUNCH OF THINGS TO PING
myPingList.Add("website1")
myPingList.Add("website3")
myPingList.Add("website2")
'LOOP THE STRING LIST OF PLACES WE WANT TO PING
For Each ItemToPing As String In myPingList
'CREATE A NEW PING OBJECT
myPing = New Ping
'ADD EVENT HANDLER FOR THE PING COMPLETED EVENT
'PingResult IS THE SUB ROUTINE BELOW
AddHandler myPing.PingCompleted, _
AddressOf PingResult
'TELL USER WHAT IS BEING PINGED
'Console.WriteLine("Sending PING Request To: " & ItemToPing)
'SEND ASYNC PING REQUEST
'myPing.SendAsync(ItemToPing, timeout, Buffer, ItemToPing)
myPing.SendAsync(ItemToPing, timeout, ItemToPing)
Next
'WAIT FOR A KEYPRESS TO CLOSE CONSOLE WINDOW
Console.WriteLine("")
Console.WriteLine("Critical Systems Ping Results:")
Console.ReadKey(True)
End Sub
'THE PING RESULT THAT WILL FIRE WHEN A PING COMPLETES
Private Sub PingResult(ByVal sender As Object, ByVal e As System.Net.NetworkInformation.PingCompletedEventArgs)
'OUTPUT TO USER, e.UserState IS WHAT WE PASSED IN AS THE UserToken (ItemToPing) IN THE ABOVE CODE
Console.WriteLine("")
Console.WriteLine("***********************************")
Console.WriteLine("Application: " & e.UserState.ToString)
''IF THERE WAS AN ERROR THEN OUTPUT INFORMATION ABOUT THE ERROR
''OTHERWISE OUTPUT INFORMATION ABOUT THE RESULT OF THE PING REQUEST
''THE EVENTARGS e HAVE A LOT OF INFORMATION IN THE e.Reply VARIABLE
If e.Error IsNot Nothing Then
Console.WriteLine("Error: " & e.Error.Message)
If e.Error.InnerException IsNot Nothing Then
Console.WriteLine("More Info: " & e.Error.InnerException.Message)
End If
Else
Console.WriteLine("Status: " & e.Reply.Status.ToString)
Console.WriteLine("Round Trip Time: " & e.Reply.RoundtripTime.ToString)
Console.WriteLine("Response Buffer Length:" & e.Reply.Buffer.Length.ToString)
End If
Console.WriteLine("***********************************")
'THE SENDER IN THE ARGUMENTS IS THE PING OBJECT THAT WE CREATED
'SO NOW REMOVE THE EVENT HANDLER LISTENER AS IT IS NO LONGER NEEDED
'AND CALL Dispose() ON THE PING CLASS TO CLEAN UP UNMANAGED RESOURCES
With DirectCast(sender, Ping)
RemoveHandler .PingCompleted, AddressOf PingResult
.Dispose()
End With
End Sub
End Module
可能有更好的方法来完成/编写此任务,但以上只是一个开始。
非常感谢您的帮助
问候
Betty.您正在为每个IP地址调用Ping.SendAsync(),这是一种异步方法,因此响应不一定会以发送时的相同顺序返回
你能改用Ping.Send()方法吗?在我看来,你有两个选择:
SendAsync
,这意味着,从设计上讲,它是异步的。这是您在代码中做出的选择。如果希望保持同步命令的顺序(即Send
),可以使用同步命令。或者,如果出于某种原因,您仍然希望它们是异步的,那么您还可以使用信号量和互斥量之类的东西在下一次迭代中停止执行。。。这里有很多选择,你只需要选择一个最适合你的