1. 程式人生 > >vb.net 實現TCP/IP協議例項詳解(使用Socket實現)

vb.net 實現TCP/IP協議例項詳解(使用Socket實現)

最近因專案需求要求實現基於vb.net的TCP/IP協議,在網上也沒有找到特別好的例項,故在學習完成後寫下如下文字,僅供大家學習,如有錯誤還請大家批評指正,感謝!

本文主要由三部分組成,第一部分展示程式碼實現的功能;第二部分解釋部分與程式碼相關的基礎知識;第三部分講解伺服器端與客戶端的實現。

程式碼在參考程式碼上做了兩個調整,1. 增加功能:伺服器端可向客戶端傳送資料;2.刪除功能:客戶端A向伺服器端傳送的資料,客戶端B也能收到

一. 程式碼執行效果

把這一部分放在最開始是想讓大家對功能有個直觀的印象,也好看看本文所述與您的需求是否一致。

伺服器端開始監聽,而後客戶端開始傳送連線請求,連線成功後,客戶端喝伺服器端可進行通訊。

二. 相關基礎知識

加入本章的初衷是,在學習程式碼的過程中,由於這部分知識的匱乏,增加了讀懂程式碼的難度,我瞭解這些知識後,問題也變的迎刃而解。

本部分簡要說明三個方面知識,2.1 TCP/IP握手步驟,2.2 使用IAsyncResult進行Socket非同步通訊 2.3 執行緒(委託的使用)

如您已對這三個方面的知識有所瞭解,則可移步第三部分。

2.1 TCP/IP握手步驟

Step1: 在建立連線之前,伺服器進入監聽(Listen)狀態,即準備接收客戶端的連線請求

Step2: 客戶端向伺服器傳送連線請求

Step3: 伺服器向客戶端傳送應答

Step4: 客戶端向伺服器傳送應答

2.2 使用IAsyncResult進行Socket非同步通訊

關於這部分,我想您只需要記住一句話就好

BeginXXXX/EndXXXXX方法過載可以傳入一個Object型別的引數,這樣可以把一些需要用到的物件傳進去,在方法內部,通過IAsyncResult的AsyncState屬性就可以把這個Object型別的引數取出來。

2.3 執行緒(委託的使用)

Step1:建立一個委託

Delegate Sub DelegateType()
Step2: 宣告、例項化一個委託並繫結Sample方法
Dim a as New DelegateType(AddressOf Sample)
Step3: 通過呼叫委託,間接呼叫方法Sample
a.Invoke()

三. 程式碼各功能模組講解

3.1 伺服器端

伺服器端有兩個類,ConnectionInfo用於對客戶端進行讀寫操;MonitorInfo用於操作每個客戶端與伺服器端的connection

MonitorInfo結構模組:


ConnectionInfo結構模組:


伺服器模組結構:


3.2 客戶端

與伺服器端類似,可自行學習。

如有講解需要,可以留言讓我知道。