400-650-7353
您所在的位置:首頁 > IT干貨資料 > python > 【Python基礎(chǔ)知識】Socket概述

【Python基礎(chǔ)知識】Socket概述

  • 來源:
  • 2021-08-30 16:47:05
  • 閱讀()
  • 分享
  • 手機端入口

Socket是網(wǎng)絡(luò)編程中常用的一個術(shù)語。通常一個Socket表示用計算機軟件建立的一個網(wǎng)絡(luò)鏈接。一個Socket的建立過程需要給出目的計算機的IP地址和端口號,再指定協(xié)議類型即可。

下面給出一個Socket的示例:

  1. >>> sk = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0

其中,第一個參數(shù)代表地址簇,包括如下可選項:

①socket.AF_INET,代表IPv4協(xié)議,是默認值。

②socket.AF_INET6,代表IPv6協(xié)議。

③socket.AF_UNIX,僅在UNIX操作系統(tǒng)進程間通信中使用。

第二個參數(shù)代表類型,包括如下可選項:

①socket.SOCK_STREAM,代表TCP協(xié)議采用的流式Socket,是默認值。

②socket.SOCK_DGRAM,代表UDP協(xié)議采用的數(shù)據(jù)報式Socket。

③socket.SOCK_RAW,代表原始套接字,采用普通的套接字不能處理ICMP、IGMP等網(wǎng)絡(luò)報文,而采用SOCK_RAW則可以處理。SOCK_RAW也可以處理特殊的IPv4報文。此外,利用SOCK_RAW可以通過IP_HDRINCL套接字選項使用戶能自己構(gòu)造IP頭。

④socket.SOCK_RDM,代表一種相對可靠的UDP形式,即保證交付數(shù)據(jù)報,但不保證UDP數(shù)據(jù)報的順序。在執(zhí)行某些特殊操作時需要使用SOCK_RDM,如發(fā)送ICMP報文。

⑤socket.SOCK_SEQPACKET,代表提供一種可靠的連續(xù)數(shù)據(jù)報服務(wù)。

第三個參數(shù)代表協(xié)議,0為默認值,根據(jù)地址格式和套接字類別,系統(tǒng)會自動選擇一個合適的協(xié)議。

Socket具有很多方法,下面分類介紹。

(1)服務(wù)器端套接字方法

sk.bind(address):將套接字綁定到地址address。在AF_INET協(xié)議下,以元組(hostname, port)的形式表示地址。

sk.listen(backlog):開始監(jiān)聽,傳入連接的最大數(shù)目。backlog指定在系統(tǒng)拒絕連接之前,可以掛起的最大連接數(shù)量。例如,backlog=5,表示系統(tǒng)已經(jīng)接到了連接請求,但服務(wù)器端還沒有調(diào)用accept()方法進行處理的連接個數(shù)最大為5。這個值不能無限大,因為要在系統(tǒng)中維護連接隊列,從而需要資源。

sk.setblocking(bool):是否阻塞(默認值為True),如果設(shè)置為False,那么accept()和recv()在接收到空包無數(shù)據(jù)時報錯。

sk.accept():接受TCP 客戶端的連接(阻塞式),等待連接的到來,并返回(conn, address)。其中conn是新建的套接字對象,可以用來接收和發(fā)送數(shù)據(jù);address是連接客戶端的地址。

(2)客戶端套接字方法

sk.connect(address):連接到address地址的套接字。address的一般格式為元組(hostname, port)。如果連接失敗,返回socket.error錯誤。

sk.connect_ex(address):連接到address地址的套接字。address的一般格式為元組(hostname, port)。如果連接成功,返回 0 ;如果連接失敗,返回編碼。

(3)通用套接字方法

sk.close():關(guān)閉套接字。

sk.recv(bufsize):接收套接字的數(shù)據(jù),數(shù)據(jù)以字符串形式返回。bufsize是緩沖區(qū)大小,指定一次最多可以接收的數(shù)據(jù)數(shù)量。

sk.recvfrom(bufsize):與recv()類似,但返回值是一個元組(data, address)。其中data是包含接收數(shù)據(jù)的字符串;address是發(fā)送數(shù)據(jù)的套接字地址。

sk.send(string):將string中的數(shù)據(jù)發(fā)送到連接的套接字。

sk.sendall(string):發(fā)送完整的TCP數(shù)據(jù)(本質(zhì)就是循環(huán)調(diào)用send()。sendall()在待發(fā)送數(shù)據(jù)量大于己端緩存區(qū)剩余空間時,數(shù)據(jù)不會丟失,循環(huán)調(diào)用send()直到發(fā)完為止)。

sk.sendto(string, address):將數(shù)據(jù)發(fā)送到套接字。address的一般格式為元組(hostname, port),指定遠程地址。

sk.settimeout(timeout):設(shè)置套接字操作的超時期。timeout是一個浮點數(shù),單位為秒,值為None表示沒有超時期。超時期一般應(yīng)該在剛創(chuàng)建套接字時對于連接的操作設(shè)置(如 client 連接最多等待5s )。

文章“【Python基礎(chǔ)知識】Socket概述”已幫助

更多內(nèi)容

>>本文地址:http://www.028benet.com/zhuanye/2021/69827.html

THE END  

聲明:本站稿件版權(quán)均屬中公教育優(yōu)就業(yè)所有,未經(jīng)許可不得擅自轉(zhuǎn)載。

1 您的年齡

2 您的學(xué)歷

3 您更想做哪個方向的工作?

獲取測試結(jié)果
  • 大前端大前端
  • 大數(shù)據(jù)大數(shù)據(jù)
  • 互聯(lián)網(wǎng)營銷互聯(lián)網(wǎng)營銷
  • JavaJava
  • Linux云計算Linux
  • Python+人工智能Python
  • 嵌入式物聯(lián)網(wǎng)嵌入式
  • 全域電商運營全域電商運營
  • 軟件測試軟件測試
  • 室內(nèi)設(shè)計室內(nèi)設(shè)計
  • 平面設(shè)計平面設(shè)計
  • 電商設(shè)計電商設(shè)計
  • 網(wǎng)頁設(shè)計網(wǎng)頁設(shè)計
  • 全鏈路UI/UE設(shè)計UI設(shè)計
  • VR/AR游戲開發(fā)VR/AR
  • 網(wǎng)絡(luò)安全網(wǎng)絡(luò)安全
  • 新媒體與短視頻運營新媒體
  • 直播帶貨直播帶貨
  • 智能機器人軟件開發(fā)智能機器人
 

快速通道fast track

近期開班時間TIME

主站蜘蛛池模板: 校花哭着扒开屁股浣肠于柔| 一本大道香焦在线视频| 韩国毛片在线观看| 日本一道在线观看| 四虎影视免费永久在线观看| 一本大道东京热无码一区 | 果冻传媒和精东影业在线观看| 国产欧美日韩精品丝袜高跟鞋| 久久国产精品女| 美女扒开尿囗给男生桶爽| 女人扒下裤让男人桶到爽| 亚洲日韩欧美国产高清αv| 国产在线播放你懂的| 成年轻人网站色免费看| 免费少妇a级毛片| 2022国产麻豆剧果冻传媒剧情 | 国产美女精品一区二区三区| 国产欧美久久一区二区| 成人无码av一区二区| 欧美丰满大乳高跟鞋| 97欧美精品激情在线观看最新| 中日韩精品电影推荐网站| 美女扒了内裤让男人桶爽视频| 天天狠狠色噜噜| 亚洲中文字幕av在天堂| 色多多视频在线| 夜夜高潮天天爽欧美| 乱人伦人妻中文字幕无码久久网| 色吊丝永久性观看网站大全| 大胸喷奶水的www的视频网站| 亚洲一区二区三区亚瑟| 精品福利视频导航| 国产精品白丝喷水在线观看| 久久久精品人妻一区亚美研究所 | 四虎884tt紧急大通知| 99免费观看视频| 日本高清免费中文字幕不卡| 人妻老妇乱子伦精品无码专区 | 一本加勒比HEZYO无码人妻| 欧美香蕉爽爽人人爽| 国产又黄又爽无遮挡不要vip|