Nine MVP's Blog

12/08/2006

สร้าง Ping tool แบบง่าย ๆ กับ .NET 2.0

Filed under: Uncategorized — Nine MVP @ 9:32 pm
ใน .Net 2.0 นี้มี Class ต่าง ๆ เพิ่มเข้ามามากมายเลย ซึ่งช่วยให้เราสามารถที่จะเรียกมาใช้งานได้อย่างง่าย ๆ

หลายครั้งที่เราจะเขียนโปรแกรมเพื่อที่จะตรวจสอบ DNS, Host , IP ด้วยการ Ping นั้นลำบากพอสมควร
เราอาจจะเข้าไปใช้ ping ใน Command ของ Windows หรือ อาจจะใช้ Sockets สร้าง Ping tool ขึ้นมา
ซึ่งต้องเขียนเพิ่มเติมอีกพอสมควร
 
มาวันนี้ในกลุ่ม  Namespace System.Net.NetworkInformation มี Ping Class สำเร็จรูปมาให้เราได้ใช้งาน
เพียงแค่ code ไม่กี่บรรทัดเราก็จะได้ Network Utility Tool ในการ Ping กันแล้วครับ
 
จากรูปข้างล่างนี้เราสามารถที่จะเลือกใส่ทั้ง IP Address , HostName, DNS เพื่อทำการ Ping ได้ครับ
 
 
มาดู Code
ที่ผมทำ code ตัวใหญ่ ๆ คือส่วนที่เกี่ยวข้องกับการ Ping ครับ

Imports

System

Imports

System.Threading

Imports

System.Net.NetworkInformation

 

delegate สำหรับการ update ข้อมูลใน Textbox จาก WorkerThread

Public Delegate Sub SetText(ByVal txt As String)

 

Public

Class Form1

‘จำนวนรอบของการ Ping

Private round As Integer

 

‘Update ผลการ Ping ใน Textbox1

Public Sub SetTextBox(ByVal txt As String)

    TextBox1.AppendText(txt)

End Sub

 

‘ป้องกันการ access control ข้าม Thread จาก WorkTThread ไป MainThread

Public Sub CheckUICrossThread(ByVal txt As String)

    If TextBox1.InvokeRequired Then

        Dim d As SetText = New SetText(AddressOf SetTextBox)

        Me.BeginInvoke(d, txt)

    Else

        TextBox1.AppendText(txt)

    End If

End Sub

 

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

    If TextBox2.Text.Length < 1 Then

        Return

    End If

    TextBox1.Clear()

    ‘ใช้ ThreadPool โดย การส่ง method ที่ต้องการให้ทำงานพร้อม parameter ที่เป็น host / ip / dns

    ThreadPool.QueueUserWorkItem(

AddressOf PingHost, TextBox2.Text)

End Sub

 

Public Sub PingHost(ByVal state As Object)

    Try

        ‘สร้าง instance ของ ping class

        Dim p As New Ping

        ‘ตรวจสอบการข้ามThread ส่ง Header detail

        CheckUICrossThread(

"Starting Ping IP: " & state & vbCrLf)

        For i As Integer = 0 To round

            Thread.Sleep(300)

            Dim rep As PingReply = p.Send(state, 100)

            If rep.Status = IPStatus.Success Then

                ‘ตรวจสอบการข้ามThread ส่ง ผลการ Ping

                CheckUICrossThread(

" Success – IP Address: " & state & " Time:" & rep.RoundtripTime.ToString & "ms " & vbCrLf)

            Else

                ‘ตรวจสอบการข้ามThread ส่ง Status อื่น ๆ หากไม่สำเร็จ

                CheckUICrossThread(rep.Status & vbCrLf)

            End If

        Next

    Catch ex As Exception

        ‘ตรวจสอบการข้ามThread ส่ง Error Msg

        CheckUICrossThread(ex.Message)

    End Try

End Sub

Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged

    round =

CInt(ComboBox1.SelectedItem)

End Sub

End Class

 

 
Download Source Code ได้ที่นี่

Leave a Comment »

No comments yet.

RSS feed for comments on this post. TrackBack URI

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Blog at WordPress.com.

%d bloggers like this: