0

午後の皆さん、

VB で最初のコンソール アプリを作成中です。私が開発しているアプリは、基本的に Web サイトのリストを ping し、ステータスを書き出すものです。

私の質問は次のとおりです...

VB で ping したい Web サイトを注文する方法はありますか。現時点では、これをリストするだけで、ping コマンドでこれらのサイトをどの順序で書き込むかは問題ではありません。問題は、同じ Web ボックスにいくつかのサイトがあり、ステータスを書き出すときにステータス メッセージが乱れているように見えることです。これは、応答時間が同じであるためだと思います。

私が使用しているコードを見つけてください...

'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

このタスクを完了/作成するためのより良い方法がおそらくありますが、上記が始まりです。どんな助けでも大歓迎です。

よろしくベティ。

4

2 に答える 2

0

各 IP アドレスに対して非同期メソッドである Ping.SendAsync() を呼び出しているため、応答は送信された順序と同じ順序で返されるとは限りません。

代わりに Ping.Send() メソッドを使用できますか?

于 2013-06-11T14:22:31.143 に答える