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: 通過呼叫委託,間接呼叫方法Samplea.Invoke()
三. 程式碼各功能模組講解
3.1 伺服器端
伺服器端有兩個類,ConnectionInfo用於對客戶端進行讀寫操;MonitorInfo用於操作每個客戶端與伺服器端的connection
MonitorInfo結構模組:
ConnectionInfo結構模組:
伺服器模組結構:
3.2 客戶端
與伺服器端類似,可自行學習。
如有講解需要,可以留言讓我知道。