天天看點

socket程式設計 套接字程式設計 (純理論,以後補一下實作代碼)

基本概念

套接字——應用層和傳輸層之間,提供應用傳輸接口

Web/RPC/中間件——應用層之上的網絡開發

應用程式設計接口API(application programming interface)

socket程式設計 套接字程式設計 (純理論,以後補一下實作代碼)

套接字接口(socket interface)簡稱套接字,是一種API。

socket API

一個程序可能會建立多個套接字,不同的程序會建立自己的套接字。

當用戶端建立套接字希望與服務端進行通信時,通過端口号來分辨與服務端的哪一個應用程序進行通信(為什麼不通過IP位址進行分辨,因為服務端主機上有多個應用程序在運作,每個應用程序可能會使用多個套接字。單單通過IP位址不足以分辨出是與哪一個套接字進行通信)

套接字對内對外使用的管理機制不同

辨別通信端點(對外)——IP位址+端口号——這是針對TCP/IP的

作業系統/程序如何管理套接字(對内)——套接字描述符(socket  description)

一個程序建立一個套接字的時候,會傳回一個套接字描述符。作業系統在管理内部套接字的時候,都是通過套接字描述符來引用的(作業系統使用套接字描述符來管理套接字的時候, 就是一種套接字抽象機制,這種抽象機制類似于檔案的抽象。Unix作業系統對于套接字管理和檔案管理,是一個管理,也就是說他把套接字看成是一個特殊的檔案;Windows作業系統是分開管理的。)。

socket程式設計 套接字程式設計 (純理論,以後補一下實作代碼)
socket程式設計 套接字程式設計 (純理論,以後補一下實作代碼)

socket API函數

1、socket函數——建立套接字

socket程式設計 套接字程式設計 (純理論,以後補一下實作代碼)

調用socket函數成功之後,會傳回一個套接字描述符(sd)

socket函數的三個參數:

1)、Protofamily)(協定族)——用于說明我的套接字面向哪種協定

socket程式設計 套接字程式設計 (純理論,以後補一下實作代碼)

2)、tyep(套接字類型)

socket程式設計 套接字程式設計 (純理論,以後補一下實作代碼)

3)、proto(協定号)

值為0代表用的是預設協定

例子——建立流套接字代碼段

socket程式設計 套接字程式設計 (純理論,以後補一下實作代碼)

2、closesocket函數——關閉連接配接(Unix中的函數名是close,沒有socket,記住)

socket程式設計 套接字程式設計 (純理論,以後補一下實作代碼)

3、bind函數——為套接字設定本地端點位址資訊(即IP位址+端口号)

socket程式設計 套接字程式設計 (純理論,以後補一下實作代碼)

socket程式設計 套接字程式設計 (純理論,以後補一下實作代碼)

熟知端口号——web伺服器就是80,sftp是25,以此類推

用戶端一般不必調用bind函數

如果伺服器有多個網卡,也就是有多個IP位址,該如何處理,綁定哪一個IP位址呢——使用位址IP體制通配符 INADDR_ANY

socket程式設計 套接字程式設計 (純理論,以後補一下實作代碼)

4、listen函數——服務端監聽狀态

socket程式設計 套接字程式設計 (純理論,以後補一下實作代碼)
socket程式設計 套接字程式設計 (純理論,以後補一下實作代碼)

5、connect函數——用戶端

socket程式設計 套接字程式設計 (純理論,以後補一下實作代碼)

6、accept函數

socket程式設計 套接字程式設計 (純理論,以後補一下實作代碼)
socket程式設計 套接字程式設計 (純理論,以後補一下實作代碼)

當伺服器調用accept,取走用戶端的連接配接請求之後,就會建立新的套接字。真正與用戶端建立連接配接的,就是這個新套接字。

7、send,sendto函數——用于發送資料

socket程式設計 套接字程式設計 (純理論,以後補一下實作代碼)
socket程式設計 套接字程式設計 (純理論,以後補一下實作代碼)

8、recv、recvfrom函數——用于接受資料

socket程式設計 套接字程式設計 (純理論,以後補一下實作代碼)
socket程式設計 套接字程式設計 (純理論,以後補一下實作代碼)

9、setsockopt、getsockopt——套接字參數設定和套接字參數讀取

socket程式設計 套接字程式設計 (純理論,以後補一下實作代碼)
socket程式設計 套接字程式設計 (純理論,以後補一下實作代碼)

套接字面向TCP/IP可以建立的服務類型

應用層要通信,就要建立套接字。套接字假期了應用層和傳輸層的一個接口。

如果我建立的套接字的面向TCP的,就是流式套接字;如果是面向UDP而建立的套接字,就是資料報套接字;如果是直接面向網絡層的套接字,則是原始套接字。

socket程式設計 套接字程式設計 (純理論,以後補一下實作代碼)

網絡應用中Socket API(TCP)調用的基本流程

socket程式設計 套接字程式設計 (純理論,以後補一下實作代碼)

用戶端軟體的設計

1、解析各個功能函數

socket程式設計 套接字程式設計 (純理論,以後補一下實作代碼)
socket程式設計 套接字程式設計 (純理論,以後補一下實作代碼)
socket程式設計 套接字程式設計 (純理論,以後補一下實作代碼)

2、TCP用戶端軟體流程

socket程式設計 套接字程式設計 (純理論,以後補一下實作代碼)

3、UDP用戶端軟體流程

socket程式設計 套接字程式設計 (純理論,以後補一下實作代碼)

繼續閱讀