Socket類別同時支援多種形式網路程式開發,許多網路通訊相關的類別都是以它為基礎衍伸而來,像之前所提的TcpClient、TcpListener與UdpClient等等。實際上個人也最喜歡用這個類別來開發網路通訊程式,雖然用Socket類別寫起來比較囉唆一點。
.NET Socket TCP/UDP程式入門基礎《建構Socket執行個體》
- 19907
- 0
- .NET Socket
Socket類別同時支援多種形式網路程式開發,許多網路通訊相關的類別都是以它為基礎衍伸而來,像之前所提的TcpClient、TcpListener與UdpClient等等。實際上個人也最喜歡用這個類別來開發網路通訊程式,雖然用Socket類別寫起來比較囉唆一點。
這一篇來應用一下BindingNavigator與BindingSource的結合,來取代前一篇使用Button做出來的功能,並且同時繫結資料到TextBox與DataGridView。
BindingSource類別在個人看來是 .NET 2.0的偉大發明之一,它具有兩種用途﹝引述自MSDN文件庫BindingSource 類別﹞:
第一,經由提供間接取值 (Indirection) 層、貨幣管理、變更告知和其他服務,簡化將表單上的控制項繫結至資料的動作。
第二,BindingSource 元件可以當做強型別的資料來源。
這一篇來談到如何使用使用TcpClient與TcpListener類別來實作TCP的通訊程式,顧名思義TcpClient當然是作為Clinet端使用;而TcpListener則是作為Server端使用。
這幾個月以來到各論壇逛來逛去幾乎已經快變成一種生活習慣,每天看著許多的人在各論檀發問,另外也有許多的人熱心的在論壇上回答問題,有個感想是發問其實也是件要學習的事情。有人或許會覺得這像抱怨文,如果看倌您看了覺得不舒服,在下我也只能跟您說聲抱歉。
在 .NET有兩種類別可用於建立UDP Socket,一是Socket類別,第二個則是由Socket類別所衍生的UdpClient類別。因為同步比非同步簡單、衍生類別比基底類別簡單、UDP比TCP簡單,所以我把同步的UdpClient當成Socket程式入門的首篇實作文章。
IPEndPoint類別其實是個小東西,就做一件很簡單的事情,把IP位址和通訊埠封裝成一個物件,雖然它是如此簡單,不過在某些狀態下會常用到這個類別,所以覺得有需要特別介紹一下。
小弟打算未來寫一系列相關於Socket程式的文章,前幾篇定位主要為介紹Socket程式的基本概念以做為基礎。
第一篇說明了BackgroundWorker的基本用法,這一篇要談到以下幾個主題:
(1) 不斷循環執行的背景執行緒及如何中斷。
(2) 執行過程的參數傳遞。
.Net Framework在多執行緒的支援上提供了許多方便的類別,而BackgroundWorker則是一項非常容易用來撰寫多執行緒的類別, 它不僅和System.Windows.Forms.Timer一樣也在工具箱提供了可拖曳使用的元件,並且提供了ProgressChanged事件使得更動主畫面控制項可以不需藉由Control.Invoke﹝有些時候Invoke的概念對初學者會有或多或少邏輯上的困擾﹞,個人覺得這個元件滿適合初學者當做撰寫多執行緒的入門。
PMP這幾年紅了起來,創新企劃學院最近要舉辦PMP專案經理認證培訓班的說明會,就順便把一些資料放在這邊,有興趣的人可以參考。
這一次來講比較進階型的排程器作法,主要想達到以下幾個目的:
1.能夠以類別的型式存在,方便改裝成類別庫的型式提供其它的應用程式引用。
2.不需要每秒﹝或每分鐘﹞不斷地去檢查是否已經抵達指定的時間,而是在指定時間到達時刻去執行必要程序即可。
3.可以將要執行的程序以CallBack方式傳入執行個體中。
4.當系統時間被改變的時候,依然能夠準確的在指定抵達時間執行程序。
有些時候我們在程式中會用到排程器的功能,說起來排程器其實就是在應用Timer的功能,我知道網路上其實有滿多這種現成的排程器類別可用,不過個人覺得自己動手寫來的有趣點。
第三種Timer就是System.Threading.Timer﹝以下簡稱為Threading.Timer﹞,和前兩個Timer不同的是,Threading.Timer是使用回呼﹝Callback﹞方式而非使用事件﹝Event﹞來執行其工作,在MSDN文件庫中的System.Threading命名空間中的[Timer 成員]可以看到這個類別是不具備事件的。
第二個要談到的時間人就是System.Timers.Timer了,System.Timers.Timer和Windows.Forms.Timer有一些個不同點
Timer在.Net中也是個挺有趣的族群,在.Net Framework中有三種不一樣的Timer,分別是Windows.Forms.Timer、System.Timers.Timer、System.Threading.Timer。這三個時間人在某些地方有點相同,也有許多地方大異其趣,所以我一直覺得他們是很有意思的。
這一篇談一個小小的技巧,最近也常在MSDN看過類似的問題,許多同好都會提出如何把一個DataGridView的Row複製到另一個DataGridView,所以就想寫一個小小的範例讓需要的人參考。
最近在MSDN論壇上有幾位網友問到關於Serial Port通訊的問題,以前我也相同的困擾,當程式發送了一個命令給設備後,倒底是設備根本沒有回應?還是回應時間太慢?還是程式命令沒送出去?還是設備根本就有問題?過去常為了這個問題常常修改程式搞了半天,總是花了一堆時間還一頭霧水。
SQL:Having VS Where
.NET提供了許多回呼的方法使得撰寫多執行緒與非同步的程式變的較為簡單,像是ThreadPool.QueueUserWorkItem、Socket與其衍生類別的Beginxxxx、ADO.NET中的SqlCommand.Beginxxxxx等等。而這些方法通常在其多載函式中其中至少會有一個具備了State Object,當我剛開始撰寫這一類程式的時候,一直無法弄清楚這個State Object的作用,所以想要特別用簡單的方式來介紹這個Object的用途。