ชุมชนคนรักภาษาเบสิค - Visual Basic Community

 ลืมรหัสผ่าน
 ลงทะเบียน
ค้นหา
ดู: 4203|ตอบกลับ: 0

[VB.NET] การใช้คำสั่ง Ping เพื่อตรวจสอบการเชื่อมต่ออุปกรณ์เครือข่าย

[คัดลอกลิงก์]

311

กระทู้

502

โพสต์

6050

เครดิต

ผู้ดูแลระบบ

ทองก้อน ทับทิมกรอบ

Rank: 9Rank: 9Rank: 9

เครดิต
6050




โดยปกติเราจะคุ้นเคยกับคำสั่ง Ping ของ DOS Command แต่สำหรับบทความนี้เราจะใช้โค้ดคำสั่งจาก VB.NET มาใช้งานแทนกันครับ โดยที่คลาส Ping ในเนมสเปซ System.Net.NetworkInformation ใช้เพื่อตรวจสอบว่าสามารถเข้าถึงเครื่องระยะไกลผ่านเครือข่ายได้หรือไม่ ในบทความนี้เราจะใช้วิธีการและคุณสมบัติของคลาส Ping เพื่อตรวจสอบความพร้อมใช้งานของเครื่องปลายทาง สำหรับคลาส Ping คล้ายกับคำสั่ง Ping.exe ที่เราใช้ใน DOS Prompt คุณสามารถส่งคำร้องขอ echo Internet Protocol Message Protocol (ICMP) โดยใช้ทั้งวิธีซิงโครนัส และอะซิงโครนัสของคลาส Ping ...


สรุปสาระสำคัญหลักๆ ...
Send() Method เป็นซิงโครนัสเมธอด จะคืนค่า PingReply ตามคำขอของ ICMP
SendAsync() Method เป็นอะซิงโครนัสเมธอด ซึ่งจะใช้เธรดแยกต่างหากเพื่อส่งการร้องขอ
PingCompleted Event จะเกิดขึ้นเมื่อการดำเนินการเสร็จสิ้น และคุณสามารถใช้ PingCompletedEventHandler เพื่อจัดการกับมันได้


มาดูโค้ดกันเถอะ ...
  1. #Region "ABOUT"
  2. ' / --------------------------------------------------------------------------
  3. ' / Developer : Mr.Surapon Yodsanga (Thongkorn Tubtimkrob)
  4. ' / eMail : thongkorn@hotmail.com
  5. ' / URL: http://www.g2gnet.com (Khon Kaen - Thailand)
  6. ' / Facebook: https://www.facebook.com/g2gnet (For Thailand)
  7. ' / Facebook: https://www.facebook.com/commonindy (Worldwide)
  8. ' / MORE: http://www.g2gnet.com/webboard
  9. ' /
  10. ' / Purpose: Ping Test with VB.NET (2010).
  11. ' / Microsoft Visual Basic .NET (2010)
  12. ' /
  13. ' / This is open source code under @CopyLeft by Thongkorn/Common Tubtimkrob.
  14. ' / You can modify and/or distribute without to inform the developer.
  15. ' / --------------------------------------------------------------------------
  16. #End Region
  17. Imports System.Net
  18. Imports System.Net.NetworkInformation
  19. Imports System.Globalization

  20. Public Class frmPingTest
  21.     Private timer As Timers.Timer

  22.     Private Sub frmPingTest_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
  23.         Call InitListView()
  24.         txtUrl.Text = "192.168.1.60"
  25.     End Sub

  26.     ' / Initailize ListView Control
  27.     Sub InitListView()
  28.         With ListView1
  29.             .Clear()
  30.             .View = View.Details
  31.             .GridLines = True
  32.             .FullRowSelect = True
  33.             .HideSelection = False
  34.             .MultiSelect = False
  35.             ' 1st Column Index = 0
  36.             .Columns.Add("IP Address", ListView1.Width \ 2 + 50)
  37.             .Columns.Add("Response Time", ListView1.Width \ 2 - 70)
  38.         End With
  39.     End Sub

  40.     Private Sub btnConnect_Click(sender As System.Object, e As System.EventArgs) Handles btnConnect.Click
  41.         If Trim(txtUrl.Text) = "" Then Exit Sub
  42.         If isConnected(Trim(txtUrl.Text)) Then
  43.             MessageBox.Show("Connect IP Adress: " & txtUrl.Text, "Report Status", MessageBoxButtons.OK, MessageBoxIcon.Information)
  44.         Else
  45.             MessageBox.Show("Can't Connect.", "Report Status", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
  46.         End If
  47.     End Sub

  48.     ''' <summary>
  49.     ''' check for a existing internet connection to some url.
  50.     ''' </summary>
  51.     ''' <returns>True if it's exist</returns>
  52.     Public Shared Function isConnected(ByVal strURL As String) As Boolean
  53.         Try
  54.             Dim addresslist As IPAddress() = Dns.GetHostAddresses(strURL)
  55.             ' | ' addresslist holds a list of ipadresses to somewhere.
  56.             ' | ' e.g  173.194.40.112
  57.             If addresslist(0).ToString().Length > 6 Then
  58.                 Return True
  59.             Else
  60.                 Return False
  61.             End If
  62.         Catch ex As Sockets.SocketException
  63.             ' | ' You are offline
  64.             ' | ' the host is unkonwn
  65.             Return False
  66.         Catch ex As Exception
  67.             Return False
  68.         End Try
  69.     End Function

  70.     Private Sub btnPing_Click(sender As System.Object, e As System.EventArgs) Handles btnPing.Click
  71.         Dim p As New Ping
  72.         If isConnected(txtUrl.Text) Then
  73.             AddHandler p.PingCompleted, AddressOf PingComplete
  74.             p.SendAsync(txtUrl.Text, "")
  75.         End If
  76.     End Sub

  77.     Private Sub PingComplete(ByVal s As Object, ByVal ev As System.Net.NetworkInformation.PingCompletedEventArgs)
  78.         'ev.Reply.Address.ToString()
  79.         'ev.Reply.RoundtripTime.ToString(CultureInfo.InvariantCulture) + " ms"
  80.         'System.Net.Dns.GetHostEntry(ev.Reply.Address.ToString()).HostName
  81.         Dim LV As ListViewItem
  82.         Dim p As Ping = DirectCast(s, Ping)
  83.         If ev.Reply.Status = IPStatus.Success Then
  84.             LV = ListView1.Items.Add(ev.Reply.Address.ToString())
  85.             LV.SubItems.Add(ev.Reply.RoundtripTime.ToString(CultureInfo.InvariantCulture) + " ms")
  86.         End If
  87.         '// Unforce Event Handler
  88.         RemoveHandler p.PingCompleted, AddressOf PingComplete
  89.         p.Dispose()
  90.     End Sub

  91.     Private Sub txtUrl_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles txtUrl.KeyPress
  92.         If e.KeyChar = Chr(13) Then
  93.             e.Handled = True
  94.             Call btnPing_Click(sender, e)
  95.         End If
  96.     End Sub

  97.     Private Sub frmPingTest_FormClosed(sender As Object, e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
  98.         Me.Dispose()
  99.         Application.Exit()
  100.     End Sub

  101. End Class
คัดลอกไปที่คลิปบอร์ด


ดาวน์โหลดโค้ดต้นฉบับ VB.NET (2010) ได้ที่นี่ ...


ขออภัย! โพสต์นี้มีไฟล์แนบหรือรูปภาพที่ไม่ได้รับอนุญาตให้คุณเข้าถึง

คุณจำเป็นต้อง ลงชื่อเข้าใช้ เพื่อดาวน์โหลดหรือดูไฟล์แนบนี้ คุณยังไม่มีบัญชีใช่ไหม? ลงทะเบียน

x
สิ่งที่ดีกว่าการให้ คือการให้แบบไม่มีที่สิ้นสุด
ขออภัย! คุณไม่ได้รับสิทธิ์ในการดำเนินการในส่วนนี้ กรุณาเลือกอย่างใดอย่างหนึ่ง ลงชื่อเข้าใช้ | ลงทะเบียน

รายละเอียดเครดิต

ข้อความล้วน|อุปกรณ์พกพา|ประวัติการแบน|G2GNet.com  

GMT+7, 2024-4-25 13:56 , Processed in 0.178289 second(s), 4 queries , File On.

Powered by Discuz! X3.4, Rev.62

Copyright © 2001-2020 Tencent Cloud.

ตอบกระทู้ ขึ้นไปด้านบน ไปที่หน้ารายการกระทู้