精品久久久久久久久水蜜桃|丁香花五月|新中文字幕麻豆视频|美女下面粉嫩粉嫩冒白浆高清|日本黄h兄妹h动漫一区二区三区|床片激情免费视频|羞羞动漫在线入口免费阅读

套接字socket的作用,什么是套接字?其作用是什么?

套接字socket的作用
以計算機為例,套接字socket的作用是支持TCP/IP的網(wǎng)絡通信的基本操作單元,可以看做是不同主機之間的進程進行雙向通信的端點,簡單的說就是通信的兩方的一種約定 , 用套接字中的相關(guān)函數(shù)來完成通信過程 。
TCP用主機的IP地址加上主機上的端口號作為TCP連接的端點,這種端點就叫做套接字(socket)或插口 。套接字用(IP地址:端口號)表示 。它是網(wǎng)絡通信過程中端點的抽象表示,包含進行網(wǎng)絡通信必需的五種信息:連接使用的協(xié)議,本地主機的IP地址,本地進程的協(xié)議端口,遠地主機的IP地址,遠地進程的協(xié)議端口 。流式套接字用于提供面向連接、可靠的數(shù)據(jù)傳輸服務 。該服務將保證數(shù)據(jù)能夠?qū)崿F(xiàn)無差錯、無重復發(fā)送,并按順序接收 。流式套接字之所以能夠?qū)崿F(xiàn)可靠的數(shù)據(jù)服務 , 原因在于其使用了傳輸控制協(xié)議,即TCP(TheTransmissionControlProtocol)協(xié)議 。
什么是套接字?其作用是什么?套接字(socket)是用于網(wǎng)絡通信的基本操作單元 。簡單的說就是通信的兩方的一種約定 , 用套接字中的相關(guān)函數(shù)來完成通信過程 。
套接字可以根據(jù)通信性質(zhì)分類,主要分
流式套接字(SOCK_STREAM),
數(shù)據(jù)報套接字(SOCK_DGRAM)以及原始套接字(SOCK_RAW).
數(shù)據(jù)報套接字提供了一種不可靠的、非連接的數(shù)據(jù)包通信方式 。所以
數(shù)據(jù)報套接字使用UDP協(xié)議,當然,winsock
2版本還支持其他協(xié)議 。
允許應用程序創(chuàng)建網(wǎng)絡套接字套接字是一套用C語言寫成的應用程序開發(fā)庫 , 它首先是一個庫 。主要作用就是實現(xiàn)進程間通信和網(wǎng)絡編程,因此在網(wǎng)絡應用開發(fā)中被廣泛使用 。
套接字(socket)是一個抽象層,應用程序可以通過它發(fā)送或接收數(shù)據(jù) , 可對其進行像對文件一樣的打開、讀寫和關(guān)閉等操作 。套接字允許應用程序與網(wǎng)絡中的其他應用程序進行通信 。網(wǎng)絡套接字是IP地址與端口的組合 。
在Python中可以基于套接字來使用傳輸層提供的傳輸服務,并以此進行開發(fā)網(wǎng)絡應用 。實際開發(fā)中使用的套接字可以分為三類:流套接字(TCP套接字)、數(shù)據(jù)報套接字和原始套接字 。
Socket詳解1、 Socket(套接字)概念
網(wǎng)絡上兩個程序通過一個雙向的通信連接實現(xiàn)數(shù)據(jù)的交換,這個連接的一段稱為一個 socket ,socket是通信的基石,是支持TCP/IP協(xié)議的網(wǎng)絡通信的基本操作單元 。它是網(wǎng)絡通信過程中端點的抽象表示,包含進行網(wǎng)絡通信必須的五種信息:連接使用的協(xié)議,本地主機的IP地址 , 本地進程的協(xié)議端口 , 遠地主機的IP地址,遠地進程的協(xié)議端口 。
Socket是對TCP/IP協(xié)議的封裝,它把復雜的TCP/IP協(xié)議族隱藏在Socket接口后面 , 提供一個易用的接口,所以Socket本身并不是協(xié)議 , 而是一個調(diào)用接口(API) 。
在一定程度可以認為Socket位于應用層和傳輸層之間 。創(chuàng)建Socket連接時,可以指定使用的傳輸層協(xié)議 , Socket可以支持不同的傳輸層協(xié)議(TCP或UDP),當使用TCP協(xié)議進行連接時,該Socket連接就是一個TCP連接 。
2、 建立Socket連接
建立Socket連接至少需要一對套接字 , 其中一個運行于客戶端,稱為ClientSocket , 另一個運行于服務器端,稱為ServerSocket 。
套接字之間的連接過程分為 三個步驟 :
(1)服務器監(jiān)聽:服務器端套接字并不定位具體的客戶端套接字 , 而是處于等待連接的狀態(tài),實時監(jiān)控網(wǎng)絡狀態(tài) , 等待客戶端的連接請求 。
(2)客戶端請求:指客戶端的套接字提出連接請求,要連接的目標是服務器端的套接字 。為此,客戶端的套接字必須首先描述它要連接的服務器的套接字,指出服務器端套接字的地址和端口號,然后就向服務器端套接字提出連接請求 。
(3)連接確認:當服務器端套接字監(jiān)聽到或者說接收到客戶端套接字的連接請求時 , 就響應客戶端套接字的請求,建立一個新的線程,把服務器端套接字的描述發(fā)給客戶 端 , 一旦客戶端確認了此描述,雙方就正式建立連接 。而服務器端套接字繼續(xù)處于監(jiān)聽狀態(tài),繼續(xù)接收其他客戶端套接字的連接請求 。
3、 Socket連接與HTTP連接
由于通常情況下Socket連接就是TCP連接,因此Socket連接一旦建立,通信雙方即可開始相互發(fā)送數(shù)據(jù)內(nèi)容,直到雙方連接斷開 。但在實際網(wǎng)絡應用 中 , 客戶端到服務器之間的通信往往需要穿越多個中間節(jié)點,例如路由器、網(wǎng)關(guān)、防火墻等 , 大部分防火墻默認會關(guān)閉長時間處于非活躍狀態(tài)的連接而導致 Socket 連接斷連,因此需要通過輪詢告訴網(wǎng)絡 , 該連接處于活躍狀態(tài) 。
而HTTP連接使用的是“請求—響應”的方式,不僅在請求時需要先建立連接,而且需要客戶端向服務器發(fā)出請求后,服務器端才能回復數(shù)據(jù) 。
4、 關(guān)于Socket長連接的心跳包
心跳包就是為了避免一個連接長時間不活躍被關(guān)閉而定時發(fā)送的一個”騷擾”數(shù)據(jù)包 。
Socket本身就是長連接的,那么為什么還要心跳包呢?
理論上說 , 這個連接是一直保持連接的,但是實際情況中 , 如果中間節(jié)點出現(xiàn)什么故障是難以知道的 。更要命的是,有的節(jié)點(防火墻)會自動把一定時間之內(nèi)沒有數(shù)據(jù)交互的連接給斷掉 。在這個時候,就需要我們的心跳包了 , 用于維持長連接,保活 。在獲知了斷線之后 , 服務器邏輯可能需要做一些事情,比如斷線后的數(shù)據(jù)清理 , 重新連接……當然,這個自然是要由邏輯層根據(jù)需求去做了 。總的來說 , 心跳包主要也就是用于長連接的保活和斷線處理 。一般的應用下,判定時間在30-40秒比較不錯 。如果實在要求高 , 那就在6-9秒 。
如果不主動關(guān)閉socket的話,系統(tǒng)不會自動關(guān)閉的,除非當前進程掛掉了,操作系統(tǒng)把占用的socket回收了才會關(guān)閉 。為什么需要心跳連接?主要是為了判斷當前連接是否是有效的、可被使用的 。在實際應用中假設一段時間沒有數(shù)據(jù)傳輸時候理論上說應該連接是沒有問題的,但是網(wǎng)絡復雜,中途出現(xiàn)問題也是常見的,網(wǎng)線被掐斷了、對方進程掛掉了、頻繁丟包等 , 這時候TCP連接是不可使用的,但是對于應用層并不知道,如果需知道網(wǎng)絡情況則要很復雜的超時進行了解 , TCP從底層就實現(xiàn)了這樣的功能 。心跳機制是TCP在一段時間間隔后發(fā)送確認連接端是否還存在,如果存在的話就會回傳一個包確定網(wǎng)絡有效 , 如果心跳包有問題,則通知上層應用當前網(wǎng)絡有問題了 。
這取決于你的server端的超時配置 ,  每個socket連接都是長連接,它是一個相當占用系統(tǒng)資源的通信管道,如果這個長連接什么事也沒干硬是要占著資源,則server端可以選擇關(guān)閉這個連接 , 以省下資源讓更多的用戶連接進來 。
所以,即便客戶端的是采用死循環(huán)while(true)方式連到服務端,對于特定的客戶端和服務端類型來說也需要一定時間間隔的心跳(告訴服務端,我還活著 , 雖然我沒干活也沒說話,但別把我關(guān)了)

套接字socket的作用,什么是套接字?其作用是什么?

文章插圖
【套接字socket的作用,什么是套接字?其作用是什么?】以上就是關(guān)于套接字socket的作用,什么是套接字?其作用是什么?的全部內(nèi)容,以及套接字socket的作用的相關(guān)內(nèi)容,希望能夠幫到您 。