C#網絡編程之--TCP協議(一)


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提供了兩個類將對套接字的編程進行了一個封裝,這兩個類是TcpClient和TcpListener, TcpListener用於接受連接請求,而TcpClient則用於接收和發送流數據。TcpListener持續地保持對端口的偵聽,一旦收到一個連接請求后,就可以獲得一個TcpClient對象,而對於數據的發送和接收都有TcpClient去完成。此時,TcpListener並沒有停止工作,它始終持續地保持對端口的偵聽狀態。----張子陽《C#網絡編程(基本概念和操作) - Part.1》

引用一段話作為過渡

得益於.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,然后繼續最自己接待引導的工作。

第一篇學習記錄就到這,其中不足,或錯的地方,希望看過的能夠指正,謝謝了~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM