.NET Socket TCP/UDP程式入門基礎《IPAddress類別》

小弟打算未來寫一系列相關於Socket程式的文章,前幾篇定位主要為介紹Socket程式的基本概念以做為基礎。

       小弟打算未來寫一系列相關於Socket程式的文章,前幾篇定位主要為介紹Socket程式的基本概念以做為基礎。

       第一個要瞭解的是IPAddress類別:我們使用Socket程式大概最主要都是在撰寫TCP或UDP的通訊程式,不論是TCP或UDP都是以IP為第三層的通訊協定;而這類程式的定址都是以IP位址和通訊埠號做為基準,通訊埠號﹝Port﹞一般是以Int32的方式表示,故不用多做說明,不過在許多相關類別或方法中要使用到IP位址時通常會以IPAddress類別的執行個體為代表,第一個就是要告訴大家如何建立IPAddress類別執行個體。

(1)以建構函式的方法建立:MSDN文件庫中提到三種建構函式,不過因為第三種是專屬IPv6略去不談,可以用兩種方法建立IPAddress執行個體
(a)  IPAddress(Int64):以Int64﹝也就是VB.NET中的Long﹞型別的參數來產生執行個體
     範例:
     Dim i As Long
     i = 192 + 168 * 256 + 1 * 256 ^ 2 + 2 * 256 ^ 3
     Dim myIpaddress As New IPAddress(i)
     TextBox1.Text = "長整數:" & CStr(i) & "=" & myIpaddress.ToString

     這個範例的IP位址是192.168.1.2,換算成長整數的算式則為 192 + 168*256 + 1*256^2 + 2*256^3
(b)  IPAddress(Byte()):以Byte陣列作為參數來產生執行個體,較之使用Int64而言更直覺一些
     範例:
     Dim myByte() As Byte = {192, 168, 1, 2}
     Dim myIpaddress As New IPAddress(myByte)
     TextBox1.Text = "Byte陣列: {192, 168, 1, 2} =" & myIpaddress.ToString

(2)以IPAddress.Parse 靜態方法建立:這是將字串轉換為IPAddress執行個體的方法
   範例:
   Dim mystr = "192.168.1.2"
   Dim myIpaddress As IPAddress = (IPAddress.Parse(mystr))
   TextBox1.Text = "字串: 192.168.1.2 =" & myIpaddress.ToString

       談到IPAddress.Parse就不得不順便談一下IPAddress.TryParse這個靜態方法,IPAddress.TryParse的用途是辨識所傳入的字串是否可有效的轉換為IPAddress執行個體,使用範例如下:
        TextBox1.Clear()
        Dim myStr = TextBox2.Text
        Dim add As IPAddress = Nothing
        If IPAddress.TryParse(myStr, add) = True Then
            Dim myIpaddress As IPAddress = (IPAddress.Parse(myStr))
            TextBox1.Text = "字串:" & myStr & "=" & myIpaddress.ToString
        Else
            TextBox1.Text = "字串:" & myStr & "為無效IP字串"
        End If

       我在測試這個方法的過程中發現了一個很有趣的事情,就是並非 aaa.bbb.ccc.ddd﹝例如192.168.1.1﹞這種字串才會被視為正確,它出現了一些非常奇特的現象,下表是我測試後的一些結果,提供給各位參考:

輸入字串轉換後IP
1920.0.0.192
192.168192.0.0.168
192.168.95192.168.0.95
192.168.95.1192.168.95.1
3330.0.1.77
333.1無效
1.3331.0.1.77
333.333無效
336631682.1.168.192
192.無效
.192無效
192.1.無效
.192.1無效