ASP.NET Socket網路編程

來源:互聯網
上載者:User

  1.Socket相關概念

(1) Socket的英文原義是“孔”或者“插座”,作為進程通訊機制,取後一種意思,通常也稱作“通訊端”,用於藐視IP地址和連接埠,是一個通訊鏈的控制代碼(其實就是兩個程式通訊用的)。

(2) Socket非常類似於電話插座,以一個電話網為例,電話的通話雙方相當於相互連信的2個程式,電話號碼就是IP地址,任何使用者在通話之前,首先要佔有一部電話機,相當於申請一個Socket;同時要知道對方的電話號碼,相當於對方有一個固定的Socket,然後向對方撥號呼叫,相當於發出串連請求,對方假如在場並且空閑,拿起電話話筒,雙方就可以正式通話,相當於串連成功,雙方通話的過程,是一方向電話機發出訊號和對方從電話機接收訊號的過程,相當於向Socket發送資料和從Socket接收資料,通話結束後,一方掛起電話機相當於關閉Socket,撤銷串連

(3) 在Internet上面有很多這樣的主機,這些主機一般運行了多個服務軟體,同時提供幾種服務,每種服務都開啟一個Socket,並綁定到一個連接埠上,不同的連接埠對應於不同的服務(應用程式)。

(4) 例如:http使用80連接埠,ftp使用21連接埠,smtp使用23連接埠。

(5) 有兩種類型的Socket

 1) 流式Socket(Stream)

        是一種連線導向的Socket,針對於連線導向的TCP服務應用,安全,但是效率低。

 2) 資料報式Socket(Datagram)

              是一種不需連線的Socket,對應於不需連線的UDP服務應用,不安全(丟失,順序混亂,在接收端要分析重排及要求重發),但是效率高。

2.  Socket一般應用模式(伺服器端和用戶端)

       (1) ,分析圖示:

 

       (2) 說明:

      1) 服務端welcoming socket開始監聽連接埠(負責監聽用戶端串連資訊)。

      2) 用戶端client socket串連服務端指定連接埠(負責接收和發送伺服器端訊息)

      3) 伺服器端監聽到用戶端串連,建立connection socket(負責和用戶端通訊)

       (3) 伺服器端的Socket(至少需要兩個)

      1) 一個負責接收用戶端串連請求(但不負責和用戶端通訊)

      2) 每成功接收到一個用戶端的串連便在伺服器端產生一個對應的Socket。

        1) 在接收到用戶端串連時建立

        2) 為每個串連成功的用戶端請求在伺服器端都建立一個對應的Socket(負責和用戶端通訊)。

       (4) 用戶端的Socket

      1)用戶端Socket

        1) 必須指定要已連線的服務器端地址和連接埠。

        2) 通過建立一個Socket對象來初始化一個到伺服器端的TCP串連。

  1. Socket的通訊過程

       (1) 伺服器端

         1) 申請一個Socket。

         2) 綁定到一個IP地址和一個連接埠上。

         3) 開啟偵聽,等待接收資料。

       (2) 用戶端

         1) 申請一個Socket。

         2) 串連伺服器(指明IP地址和連接埠號碼)

         3) 伺服器端串連到串連請求後,產生一個新的Socket(連接埠大於1024)於用戶端建立串連並進行通訊,原偵聽Socket繼續偵聽。:

 

  1. Socket的建構函式

       (1) 串連通過建構函式完成

       (2) public Socket(AddressFamily address,SocketType socket,ProtocolType protocol)

      1) AddressFamily成員指定Socket用來解析地址的定址方案。例如:

              InterNetWork相當於Socket使用一個IP版本4地址串連。

      2) SocketType定義要開啟的Socket的類型。

      3) Socket類使用ProtocolType枚舉向Windows Socket API通知所請求的協議

如:mySocket=new Socket(AddressFamily.InterNetWork,SocketType.Stream,ProtocolType.TCP);

       (3) 注意:

      1) 至少要定義一個要串連的遠程主機的IP和連接埠號碼

      2) 連接埠號碼必須為1和65535之間,最好在1024之後。

      3) 要串連的遠程主機必須正在監聽指定連接埠,也就是說你無法隨意串連遠程主機。

              如:IPAddress addr=IPAddress.Parse(10.10.4.200);

                     IPEndPoint endp=new IPEndPoint(addr,10001);

       服務端先綁定:serverWelcomeSocket.Bind(endp);

              用戶端在串連:ClientSocket.Connect(endp);

  1. Socket的方法

       (1) 相關類

         1) IPAddress類:包含了一個IP地址

         2) IPEndPoint類:包含了一對IP地址和連接埠號碼

       (2) 相關方法

         1) Socket():建立一個Socket。

      2) Bind():綁定一個本地的IP和連接埠號碼(IPEndPoint)

         3) Listen():讓Socket偵聽傳入的串連嘗試,並指定偵聽隊列容量。

      4) Connect():初始化與另外一個Socket的串連。

         5) Accept():接收串連並且返回一個新的Socket。

      6) Send():輸出資料到Socket。

         7) Receive():從Socket中讀取資料。

      8) Close():關閉Socket(銷毀串連)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.