TCP 是面向連接的傳輸協議
面向連接,其實就好比,A打電話給B,如果B接聽了,那么A和B之間就的通話,就是面向連接的
TCP 是全雙工的傳輸協議
全雙工,這個理解起來也很簡單,A打電話給B,B接聽電話,那么A可以說話給B聽,同樣B也可以給A說話,不可能只允許一個人說話.
TCP 是點對點的
點對點,這個看了上面的舉例相比大家都知道了,還要說一點的是,如果在A和B打電話過程中,B又來了一個緊急電話,那么B就要將與A的通話進行通話保持,所以不管怎么講同一個連接只能是點對點的,不能一對多。
TCP 是可靠地數據傳輸
可靠地,一旦建立了連接,數據的發送一定能夠到達,並且如果A說“你好嗎?” B不會聽到“嗎你好”,這就是可靠地數據傳輸
說完了TCP的諸多優點,再說說TCP的另一個重要的合作伙伴:套接字(Socket)
好吧,說實話我不知道如何形象的說套接字,或許我不太理解的緣故,粗略的說一下吧,TCP是傳輸層的協議,用於數據傳送的,在我們編寫短信時,短信窗口其實就是一個應用程序,當我們發送短信時,短信從應用程序滾到傳輸通道,應用程序和傳輸通道間就存在一個套接字的東西,沒有套接字,應用程序就無法將短信滾到傳輸通道。額...感覺灰常別扭。
如果想清楚的了解套接字是什么 請大家移步 C#網絡編程
引用一段話作為過渡
得益於.Net 對套接字進行的封裝,我們可以很簡單的寫一下簡單的基礎例子,關於TCP協議,通常將發起請求連接的一方為客戶端,另一端為服務端
簡單服務端代碼:
IPAddress ip = IPAddress.Parse("127.1.1.1");//服務端地址 TcpListener server = new TcpListener(ip,8005);//偵聽的端口號 server.Start();//開始偵聽
其實服務端就像是某機場,某機場的地址就是服務端地址,機場的某條降落跑道就是服務端監聽的端口號
客戶端代碼:
IPAddress ip = IPAddress.Parse("127.1.1.1"); TcpClient client = new TcpClient(); client.Connect(ip, 8005);
看了以上代碼,就很明白是怎么回事了,飛機要飛往某個機場肯定要先知道某機場的地址,和機場允許該飛機降落的跑道號,一且都知道了,那么就飛過去,降落吧,嘿嘿
有了以上代碼,客戶端就可以連接服務端了,但是服務端是如何知道已經於一個客戶端連接了呢?
在服務器端開始偵聽以后,可以在TcpListener實例上調用AcceptTcpClient()來獲取與一個客戶端的連接,它返回一個TcpClient類型實例
TcpClient client = server.AcceptTcpClient();//server 就是TcpListener的實例
TcpListener 就像一個酒店的前台,可以接受很多對象的連接,職責很單一,就是接受連接請求,將連接請求對象交給TcpClient,然后繼續最自己接待引導的工作。
第一篇學習記錄就到這,其中不足,或錯的地方,希望看過的能夠指正,謝謝了~