91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

什么是socket套接字

發布時間:2021-09-01 14:44:22 來源:億速云 閱讀:117 作者:chen 欄目:大數據

本篇內容介紹了“什么是socket套接字”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

客戶端-服務器模型

互聯網已經深入我們生活的方方面面,重要性不言而喻。上世紀70年代互聯網剛發明的時候,就確定了客戶端-服務器模型,這個編程模型一直沿用到現在都沒有變過,我們在電腦上打開一個網站,在微信上聊天,打開一個app本質上都是客戶端和服務器的連接和交互。

客戶端-服務器模型的操作方式如下:

什么是socket套接字

  1. 客戶端需要一個服務的時候,比如需要打開一個網頁,它就向服務器發送一個請求。

  2. 服務器收到請求后,會進行適當的處理,比如從數據庫讀取客戶端需要的數據。

  3. 服務器處理好請求后,會按一定的格式返回客戶端需要的數據,然后發給客戶端一個響應。

  4. 客戶端收到服務器的響應后,會處理網頁數據,然后再顯示器上顯示出來,然后客戶端再發送請求給服務器,如此循環。


socket 套接字

客戶端和服務器是通過什么來連接的呢?是20 世紀 80 年代加州大學伯克利分校提出來的socket套接字,也叫伯克利套接字。socket的工作模式如下圖:

什么是socket套接字

服務器socket準備工作:

  1. 初始化socket

  2. 執行bind綁定操作,將服務器的服務綁定在一個ip地址和一個特定的端口上

  3. 執行listen操作,將原先的socket轉化為服務端的socket

  4. 執行accept操作,將進程阻塞在accept方法上,等待客戶端的連接

客戶端初始化一個socket后,可以直接調用connet方法連接服務端的socket,經過著名的TCP三次握手,客戶端和服務器建立連接,進入數據傳輸狀態。

客戶端發起write寫操作,服務器通過read接收數據,然后write到客戶端,客戶端用read接收數據,當客戶端和服務器交互完成之后,客戶端發起close操作,發送一個FIN包通知服務器關閉鏈接。

socket 套接字地址格式

客戶端和服務器建立連接的時候,需要知道對方的地址。就像快遞小哥要給你送快遞就得知道你家住那棟樓,哪個房間一樣。互聯網世界的ip地址和端口就像哪棟樓幾零幾一樣,能夠精確的找到服務器上的某個服務。

什么是socket套接字

我們使用socket的時候就需要對方的ip地址和端口號,socket的地址結構在程序里的表示如下面的圖示。

sin_family表示地址的類型,IPv4的值就是AF_INET,IPv6的值就是AF_INET6,程序通過sin_family的類型就可以知道該套接字地址是哪種類型了。

in_port_t表示端口號,我們看到端口號占16位,所以端口號的數量最大支持2的16次方,就是65536個端口,也就是0~65535的范圍。因為每次建立連接的時候都需要知道對方的端口號,很多知名的服務就把自己的端口號固定了,叫做保留端口。這樣客戶端要連接這些服務的時候就知道用哪個端口了,不用每次再去問了,比如:ftp的21端口,ssh的22端口,telnet的23端口,http的80端口。

通用套接字地址格式

什么是socket套接字

IPv4 套接字格式地址

什么是socket套接字

IPv6 套接字地址格式

什么是socket套接字

本地套接字地址格式

什么是socket套接字

幾種套接字地址格式比較

什么是socket套接字

通用套接字地址

IPv4套接字格式地址表示IPv4的地址,IPv6套接字格式地址表示IPv6的地址,還有本地地址結構用于本地 socket 通信,還有一個是通用地址結構,為什么要有通用地址結構呢?

原來為了方便函數的的調用,像connect,bind,accept方法都需要一個套接字地址結構的指針參數:

什么是socket套接字

什么是socket套接字

什么是socket套接字

為了方便起見,函數的定義就直接用通用的地址結構指針定義,然后調用的時候再傳入具體的地址結構指針,有沒有和面向對象編程的多態特性很像?

但是ipv4地址結構的大小為16字節,ipv6地址結構的大小為28字節,本地地址地址結構的大小最多為110字節,而通用地址結構的大小為16字節。除了ipv4地址,其他地址都比通用地址結構大,那么其他地址是如果轉換為通用地址的呢?

仔細看一下,這里參數傳入的是地址結構的指針哦,后面還有一個*addrlen的參數,表示地址結構的長度,所以只要取addrlen長度的數據就行了,具體的類型可以根據sin_family來確定哦。

“什么是socket套接字”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

莆田市| 富宁县| 周至县| 大同县| 望奎县| 邢台县| 阿勒泰市| 宜州市| 大姚县| 屏南县| 杨浦区| 贡嘎县| 巴彦淖尔市| 涿州市| 拉孜县| 阳城县| 安吉县| 元阳县| 徐水县| 无锡市| 北流市| 酒泉市| 侯马市| 闵行区| 芦溪县| 利津县| 宁远县| 庆云县| 湘阴县| 卫辉市| 扬中市| 宁武县| 区。| 商洛市| 大余县| 黑河市| 泽州县| 绵阳市| 天门市| 偏关县| 南丹县|