一、概要
本篇文章主要講解基於.net中tcp/ip網絡通信編程。在自我進步的過程中記錄這些內容,方便自己記憶的同時也希望可以幫助到大家。技術的進步源自於分享和不斷的自我突破。
技術交流QQ群:580749909 歡迎交流有問必答,文章尾有個人的微信公眾號有興趣的小伙伴多多關注。整篇文章走向比較偏應用層面,不會涉及底層因為網絡通信博大精深要把整個都講明白可以出一本書了。
二、簡介
什么是網絡編程,網絡編程就是編寫程序使兩台連聯網的計算機相互交換數據。怎么交換數據呢?兩台電腦都插一根線就可以了嗎?稍微誇張點說差不多是這個意思(需要物理連接)
有人就會問了,我平常跟張三聊QQ的時候我也沒跟他直接連網線那怎么可以聯網呢。你買了電信的寬帶電信是不是得給你牽線裝貓,最終這些線會連到電信的機房由他們來管理。在這個基礎上,
如何編寫數據傳輸軟件呢。操作系統提供了“套接字”(socket)的組件我們基於這個組件進行網絡通信開發。
本章主要討論tcp套接字,接下來的工作流程都會以“打電話”來生動表達,tcp套接字可以比喻成電話。
三、主要內容
電話可以同時用來撥打和接聽的,但對套接字而言,撥打和接聽是有區別的。我們先講解套接字創建過程。其實這個過程跟我們生活中的打電話的場景比較相似。
我們來解析打電話的步驟:
1.通信方式有很多種,可以當面溝通、書信溝通、電話溝通、托人帶話等等。
這里張三和李四約定好都用電話溝通(確認通訊協議,這里指TCP/IP),張三給李四打電話(張三在這里的身份是客戶端,而李四對應身份是服務端 身份也確認好了)。
2.雙方打電話得有電話機(創建socket對象)
3.張三必須知道撥打對象的電話號碼(知道服務端的ip和port),李四電話號碼是123456(綁定套接字)
4.張三撥打李四電話(客戶端連接服務端,connect連接)
5.被打電話的那一方聽到電話響了(listen監聽)
6.李四害怕是推銷電話想着要跟他確認身份是不是張三,不是張三就准備掛斷電話
7.接起電話確認對方身份,張三問是李四嗎(三次握手中,第一次握手)
8.李四回答,我是李四。你是?(三次握手,第二次握手)
9.張三說你好李四,我是張三(三次握手,第三次握手)
10.確認過眼神遇上對的人,李四決定跟他繼續談話(accept接受連接請求)
11.接下來就開始長篇大論的攀談(數據交互)
12.最終要掛電話了,張三對李四說那今天就講到這里(四次揮手,第一次)
13.李四說行啊今天就講到這里(四次揮手,第二次)
14.張三說那我掛斷了啊(四次揮手,第三次)
15.李四說好的你掛吧(四次揮手,第四次)
16.掛斷(結束)
閱讀以上流程接下來我們來看看流程圖就非常好理解了:
個人技術分享公眾號,不定時更新技術文章↓