1. 程式人生 > >C#學習筆記(12)- Socket網路程式設計

C#學習筆記(12)- Socket網路程式設計

理解Socket

  • 人通過電話可以通訊
  • 程式之間通過Socket來通訊
  • 套接字就是程式間的電話機
  • 協議就是程式與程式之間的通用語言:TCP與UDP協議
  • Socket的英文原義是“孔”或“插座”。作為程序通訊機制,取後一種意思。通常也稱作“套接字”,用於描述IP地址和埠,是一個通訊鏈的控制代碼(其實就是兩個程式通訊用的。)
  • socket非常類似於電話插座。以一個電話網為例。電話的通話雙方相當於相互通訊的2個程式,電話號碼就是IP地址。任何使用者在通話之前,首先要佔有一部電話機,相當於申請一個socket;同時要知道對方的號碼,相當於對方有一個固定的socket。然後向對方撥號呼叫,相當於發出連線請求。對方加入在場並空閒,拿起電話話筒,雙方就可以正式通話,相當於連線成功雙方通話的過程,是一方向電話機發出訊號和對方從電話機接收訊號的過程,相當於向socket傳送資料和從socket接收資料。通話結束後,一方掛起電話機相當於關閉socket,撤銷連線。

埠的概念

  • 在Internet上有很多這樣的主機,這些主機一般運行了多個服務軟體,同時提供幾種服務。每種服務都打開了一個socket,並繫結到一個埠上,不同的埠對應與不同的程式(應用程式)。
  • 例如:http使用80埠,ftp使用21埠,smtp使用25埠
  • 有兩種型別:50000
  • 流式socket(stream):是一種面向連線的socket,針對於面向連線的TCP服務應用,安全,但是效率低
  • 資料報式socket(datagram):是一種無連線的socket,對應於無連線的UDP服務應用。不安全,順序混亂,在接收端要分析重排及要求重發),但是效率高。

三次握手協議

  1. 你有空嗎?//client
  2. 我有空 //server
  3. 我知道你有空了 //client

socket通訊基本流程圖

這裡寫圖片描述