亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

什么是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

铜陵市| 海淀区| 金坛市| 湖北省| 上栗县| 涞水县| 凤山县| 论坛| 宁阳县| 平山县| 绵阳市| 九台市| 察雅县| 大名县| 固镇县| 临海市| 寻乌县| 郁南县| 红河县| 弥渡县| 富平县| 大邑县| 中方县| 杨浦区| 永安市| 南宫市| 万州区| 陆河县| 临海市| 新疆| 绵阳市| 阳江市| 通辽市| 九龙城区| 眉山市| 山东| 蕉岭县| 北川| 安阳市| 昭觉县| 布尔津县|