Python_socket 命令大全

socket是什么

什么是socket所謂socket通常也稱作"套接字",用于描述IP地址和端口猬错,是一個(gè)通信鏈的句柄。應(yīng)用程序通常通過"套接字"向網(wǎng)絡(luò)發(fā)出請(qǐng)求或者應(yīng)答網(wǎng)絡(luò)請(qǐng)求絮识。說白了就是一種通信機(jī)制礁苗。它類似于銀行,電信啊這些部分的電話客服部門级解。你打電話的時(shí)候冒黑,那邊會(huì)分配置一個(gè)人回答你的問題,客服部門就相當(dāng)于socket的服務(wù)器端了勤哗,你這邊呢就相當(dāng)于客戶端了抡爹,在和你通話結(jié)束前,如果有人在想找和你通話的那個(gè)說話芒划,是不可能的冬竟,因?yàn)槟阍诤退ㄐ排费ǎ?dāng)然客服部門的電話交換機(jī)也不會(huì)重復(fù)分配。我們天天用的http\smtp\ftp等網(wǎng)絡(luò)協(xié)議都是基于socket的上層實(shí)現(xiàn)泵殴,無論使用何種網(wǎng)絡(luò)協(xié)議涮帘,最本質(zhì)上都是在進(jìn)行數(shù)據(jù)的接收和發(fā)送,只不過發(fā)送的數(shù)據(jù)類型和內(nèi)容不同罷了笑诅,“發(fā)送”和“接收”這兩個(gè)動(dòng)作就是socket處理數(shù)據(jù)的主要方式调缨。

socket起源于Unix,而Unix/Linux基本哲學(xué)之一就是“一切皆文件”吆你,都可以用“打開open–> 讀寫write/read–> 關(guān)閉close”模式來操作弦叶。Socket就是該模式的一個(gè)實(shí)現(xiàn),socket即是一種特殊的文件妇多,一些socket函數(shù)就是對(duì)其進(jìn)行的操作(讀/寫IO伤哺、打開、關(guān)閉)者祖,python的socket模塊是直接調(diào)用的unix的socket庫立莉,接下來我們一起來看下,如何在python下實(shí)現(xiàn)socket咸包。

使用socket時(shí)需要指定Socket Family(地址簇)桃序,包括以下幾種:

  • socket.AF_UNIX 只能夠用于單一的Unix系統(tǒng)進(jìn)程間通信
  • socket.AF_INET 用于主機(jī)之間的網(wǎng)絡(luò)通信
  • socket.AF_INET6 IPv6通信
    若想實(shí)現(xiàn)主機(jī)之間的通信,我們就得使用socket.AF_INET

確認(rèn)地址簇后烂瘫,還需要指定socket 數(shù)據(jù)類型

  • socket.SOCK_STREAM 流式socket, for TCP
  • socket.SOCK_DGRAM 數(shù)據(jù)報(bào)式socket, for UDP
  • socket.SOCK_RAW 原始套接字媒熊,普通的套接字無法處理ICMP、IGMP等網(wǎng)絡(luò)報(bào)文坟比,而SOCK_RAW可以芦鳍;其次,SOCK_RAW也可以處理特殊的IPv4報(bào)文葛账;此外柠衅,利用原始套接字,可以通過IP_HDRINCL套接字選項(xiàng)由用戶構(gòu)造IP頭籍琳。
  • socket.SOCK_RDM 是一種可靠的UDP形式菲宴,即保證交付數(shù)據(jù)報(bào)但不保證順序。SOCK_RAM用來提供對(duì)原始協(xié)議的低級(jí)訪問趋急,在需要執(zhí)行某些特殊操作時(shí)使用喝峦,如發(fā)送ICMP報(bào)文。SOCK_RAM通常僅限于高級(jí)用戶或管理員運(yùn)行的程序使用呜达。
  • socket.SOCK_SEQPACKET 可靠的連續(xù)數(shù)據(jù)包服務(wù)

我們主要用的一般是SOCK_STREAM (for TCP)和SOCK_DGRAM(for UDP)

進(jìn)行socket調(diào)用時(shí)可能會(huì)用到的函數(shù):

  • s = socket(family,type[,protocal]) 使用給定的地址族谣蠢、套接字類型、協(xié)議編號(hào)(默認(rèn)為0)來創(chuàng)建套接字。

套接字的實(shí)例具有以下方法:

  • s.bind(address) 將套接字綁定到地址眉踱。address地址的格式取決于地址族挤忙。在AF_INET下,以元組(host,port)的形式表示地址谈喳。
  • s.listen(backlog) 開始監(jiān)聽傳入連接册烈。backlog指定在拒絕連接之前,操作系統(tǒng)可以掛起的最大連接數(shù)量叁执。該值至少為1茄厘,大部分應(yīng)用程序設(shè)為5就可以了矮冬。
  • s.connect(address) 連接到address處的套接字谈宛。一般,address的格式為元組(hostname,port)胎署,如果連接同一臺(tái)機(jī)器上的服務(wù)器吆录,可以將hostname設(shè)為‘localhost’。如果連接出錯(cuò)琼牧,返回socket.error錯(cuò)誤恢筝。
  • s.connect_ex(adddress) 功能與connect(address)相同,但是成功返回0巨坊,失敗返回errno的值撬槽。
  • s.accept() 接受連接并返回(conn,address),其中conn是新的套接字對(duì)象,可以用來接收和發(fā)送數(shù)據(jù)趾撵。address是連接客戶端的地址侄柔。
  • s.close() 關(guān)閉套接字。
  • s.fileno() 返回套接字的文件描述符占调。
  • s.getpeername() 返回連接套接字的遠(yuǎn)程地址暂题。返回值通常是元組(ipaddr,port)。
  • s.getsockname() 返回套接字自己的地址究珊。通常是一個(gè)元組(ipaddr,port)
  • s.getsockopt(level,optname[.buflen]) 返回套接字選項(xiàng)的值薪者。
  • s.gettimeout() 返回當(dāng)前超時(shí)期的值,單位是秒剿涮,如果沒有設(shè)置超時(shí)期言津,則返回None。
  • s.recv(bufsize[,flag]) 接受套接字的數(shù)據(jù)取试。數(shù)據(jù)以字符串形式返回悬槽,bufsize指定要接收的最大數(shù)據(jù)量。flag提供有關(guān)消息的其他信息想括,通诚萜祝可以忽略。
  • s.recvfrom(bufsize[.flag]) 與recv()類似,但返回值是(data,address)烟逊。其中data是包含接收數(shù)據(jù)的字符串渣窜,address是發(fā)送數(shù)據(jù)的套接字地址。
  • s.send(string[,flag]) 將string中的數(shù)據(jù)發(fā)送到連接的套接字宪躯。返回值是要發(fā)送的字節(jié)數(shù)量乔宿,該數(shù)量可能小于string的字節(jié)大小。
  • s.sendall(string[,flag]) 將string中的數(shù)據(jù)發(fā)送到連接的套接字访雪,但在返回之前會(huì)嘗試發(fā)送所有數(shù)據(jù)详瑞。成功返回None,失敗則拋出異常臣缀。
  • s.sendto(string[,flag],address) 將數(shù)據(jù)發(fā)送到套接字坝橡,address是形式為(ipaddr,port)的元組精置,指定遠(yuǎn)程地址计寇。返回值是發(fā)送的字節(jié)數(shù)。該函數(shù)主要用于UDP協(xié)議脂倦。
  • s.setblocking(flag) 如果flag為0番宁,則將套接字設(shè)為非阻塞模式,否則將套接字設(shè)為阻塞模式(默認(rèn)值)赖阻。非阻塞模式下蝶押,如果調(diào)用recv()沒有發(fā)現(xiàn)任何數(shù)據(jù),或send()調(diào)用無法立即發(fā)送數(shù)據(jù)火欧,那么將引起socket.error異常棋电。
  • s.setsockopt(level,optname,value) 設(shè)置給定套接字選項(xiàng)的值。
  • s.settimeout(timeout) 設(shè)置套接字操作的超時(shí)期布隔,timeout是一個(gè)浮點(diǎn)數(shù)离陶,單位是秒。值為None表示沒有超時(shí)期衅檀。一般招刨,超時(shí)期應(yīng)該在剛創(chuàng)建套接字時(shí)設(shè)置,因?yàn)樗鼈兛赡苡糜谶B接的操作(如connect())普通的非套接字實(shí)例的函數(shù)
  • getdefaulttimeout()返回默認(rèn)的套接字超時(shí)時(shí)間(以秒為單位)哀军。None表示不設(shè)置任何超時(shí)時(shí)間沉眶。
  • gethostbyname(hostname) 將主機(jī)名(如“www.baidu.com”)轉(zhuǎn)換為IPv4地址,IP地址將以字符串的形式返回杉适,如“8.8.8.8”谎倔。不支持IPv6
  • gethostname() 返回本地機(jī)器的主機(jī)名。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末猿推,一起剝皮案震驚了整個(gè)濱河市片习,隨后出現(xiàn)的幾起案子捌肴,更是在濱河造成了極大的恐慌,老刑警劉巖藕咏,帶你破解...
    沈念sama閱讀 217,084評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件状知,死亡現(xiàn)場離奇詭異,居然都是意外死亡孽查,警方通過查閱死者的電腦和手機(jī)饥悴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來盲再,“玉大人西设,你說我怎么就攤上這事〈鹋螅” “怎么了贷揽?”我有些...
    開封第一講書人閱讀 163,450評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長绿映。 經(jīng)常有香客問我擒滑,道長腐晾,這世上最難降的妖魔是什么叉弦? 我笑而不...
    開封第一講書人閱讀 58,322評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮藻糖,結(jié)果婚禮上淹冰,老公的妹妹穿的比我還像新娘。我一直安慰自己巨柒,他們只是感情好樱拴,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,370評(píng)論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著洋满,像睡著了一般晶乔。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上牺勾,一...
    開封第一講書人閱讀 51,274評(píng)論 1 300
  • 那天正罢,我揣著相機(jī)與錄音,去河邊找鬼驻民。 笑死翻具,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的回还。 我是一名探鬼主播裆泳,決...
    沈念sama閱讀 40,126評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼柠硕!你這毒婦竟也來了工禾?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,980評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎闻葵,沒想到半個(gè)月后糙捺,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,414評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡笙隙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,599評(píng)論 3 334
  • 正文 我和宋清朗相戀三年洪灯,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片竟痰。...
    茶點(diǎn)故事閱讀 39,773評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡签钩,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出坏快,到底是詐尸還是另有隱情铅檩,我是刑警寧澤,帶...
    沈念sama閱讀 35,470評(píng)論 5 344
  • 正文 年R本政府宣布莽鸿,位于F島的核電站昧旨,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏祥得。R本人自食惡果不足惜兔沃,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,080評(píng)論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望级及。 院中可真熱鬧乒疏,春花似錦、人聲如沸饮焦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽县踢。三九已至转绷,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間硼啤,已是汗流浹背议经。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留丙曙,地道東北人爸业。 一個(gè)月前我還...
    沈念sama閱讀 47,865評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像亏镰,于是被迫代替她去往敵國和親扯旷。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,689評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • Socket創(chuàng)建函數(shù) socket.socket(socket_family, socket_type, prot...
    JianMing閱讀 6,011評(píng)論 1 13
  • 最近在學(xué)習(xí)Python看了一篇文章寫得不錯(cuò)索抓,是在腳本之家里的钧忽,原文如下毯炮,很有幫助: 一、網(wǎng)絡(luò)知識(shí)的一些介紹 soc...
    qtruip閱讀 2,708評(píng)論 0 6
  • socket通信原理 socket又被叫做套接字,它就像連接到兩端的插座孔一樣,通過建立管道耸黑,將兩個(gè)不同的進(jìn)程之間...
    jiodg45閱讀 1,140評(píng)論 0 1
  • 大綱 一.Socket簡介 二.BSD Socket編程準(zhǔn)備 1.地址 2.端口 3.網(wǎng)絡(luò)字節(jié)序 4.半相關(guān)與全相...
    VD2012閱讀 2,335評(píng)論 0 5
  • 1三個(gè)相關(guān)數(shù)據(jù)結(jié)構(gòu). 關(guān)于socket的創(chuàng)建桃煎,首先需要分析socket這個(gè)結(jié)構(gòu)體,這是整個(gè)的核心大刊。 104 str...
    ice_camel閱讀 2,824評(píng)論 1 8