Pingを行うには、System.Net.NetworkInformationネームスペースのPingクラスを利用すれば
簡単に行うこと事ができます。
My.Computer.NetworkネームスペースのPingと同じだが、こちらは同期で実行されますが、
System.Net.NetworkInformationネームスペースのPingクラスには非同期で行えるメソッドなどが提供されています。
画面は、以下のようなフォームになります。
非同期で行う為、Pingが完了した場合に発生するPingCompletedイベントを受け取れるように、以下を定義しておきます。
Dim WithEvents pingClient As New Net.NetworkInformation.Ping
btnSend_Clickイベントプロシージャは、以下のようになっています。
Private Sub btnSend_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnSend.Click
''エラーチェック
If (txtHostName.Text.Length = 0) Then
MessageBox.Show("対象ホストを入力してください", "エラー", _
MessageBoxButtons.OK, MessageBoxIcon.Error)
Exit Sub
End If
''ボタンの制御
btnSend.Enabled = False
btnCancel.Enabled = True
''Pingの実行
'Dim buffer(64) As Byte
'Dim options As New PingOptions
'options.DontFragment = False
'options.Ttl = 60
txtMessage.Text = "Pinging " & txtHostName.Text & Environment.NewLine
Call pingClient.SendAsync(txtHostName.Text, Nothing)
'Call pingClient.SendAsync(txtHostName.Text, 3000, buffer, options, Nothing)
End Sub
SendAsyncメソッドが非同期で行う為のメソッドです。処理が完了した場合には、PingCompletedイベントが発生します。
尚、コメントにしている行は、Pingオプションを指定する場合に利用しますが、今回は利用していません。
処理が完了した場合に行う処理は、以下のようになっています。
Private Sub pingClient_PingCompleted(ByVal sender As Object, _
ByVal e As System.Net.NetworkInformation.PingCompletedEventArgs) _
Handles pingClient.PingCompleted
If e.Error Is Nothing Then
''エラーでない場合
If e.Cancelled Then
''キャンセルされた
txtMessage.Text &= "Ping cancelled." & Environment.NewLine
Else
If e.Reply.Status = IPStatus.Success Then
''成功の場合
txtMessage.Text &= "Reply from " & e.Reply.Address.ToString & _
" : bytes=" & e.Reply.Buffer.Length.ToString & _
" times=" & e.Reply.RoundtripTime.ToString & _
"ms TTL=" & e.Reply.Options.Ttl.ToString
Else
''失敗の場合
txtMessage.Text &= " " & GetStatusString(e.Reply.Status) & _
Environment.NewLine
End If
End If
Else
''エラーの場合
txtMessage.Text &= e.Error.InnerException.Message.ToString() & _
Environment.NewLine
End If
btnSend.Enabled = True
btnCancel.Enabled = False
End Sub
ここで、メッセージを表示する処理を行っています。
また、処理を途中で中止したい場合は、SendAsyncCancelメソッドを呼び出すことで行えます。
サンプルを提供しますので、そちらで色々と試してみてください。