python socket

一、Socket是什么

1、socket通常也稱作“套接字”,用于描述IP地址和端口,是一個(gè)通信鏈的句柄。應(yīng)用程序通常通過“套接字”向網(wǎng)絡(luò)發(fā)出請求或者應(yīng)答網(wǎng)絡(luò)請求。
2、socket的個(gè)人理解:Socket看作是一種特殊的文件,一些socket函數(shù)就是對其進(jìn)行的操作(讀/寫IO、打開、關(guān)閉)

二、Socket type

socket.AF_UNIX 只能夠用于單一的Unix系統(tǒng)進(jìn)程間通信
socket.AF_INET 服務(wù)器之間網(wǎng)絡(luò)通信
socket.AF_INET6IPv6
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)但不保證數(shù)據(jù)。SOCK_RAM用于提供對原始協(xié)議的低級訪問,在需要執(zhí)行某些特殊操作時(shí)使用,如發(fā)送ICMP報(bào)文。SOCK_RAM通常僅限于高級用戶或管理員運(yùn)行的程序使用。
socket.SOCK_SEQPACKET 可靠的連續(xù)數(shù)據(jù)包服務(wù)

三、Socket函數(shù)庫

1、s.bind(address) 將套接字綁定到地址。address地址的格式取決于地址族。在AF_INET下,以元組(host,port)的形式表示地址。
2、s.listen(backlog) 開始監(jiān)聽傳入連接。backlog指定在拒絕連接之前,操作系統(tǒng)可以掛起的最大連接數(shù)量。該值至少為1,大部分應(yīng)用程序設(shè)為5就可以了
3、s.connect(address) 連接到address處的套接字。一般,address的格式為元組(hostname,port),如果連接同一臺機(jī)器上的服務(wù)器,可以將hostname設(shè)為“l(fā)ocalhost”。如果連接出錯,返回socket.error錯誤。
4、s.connect_ex(address) 功能與connect(address)相同,但是成功返回0,失敗返回errno的值
5、s.accept() 接受連接并返回(conn,address),其中conn是新的套接字對象,可以用來接收和發(fā)送數(shù)據(jù)。address是連接客戶端的地址
6、s.close() 關(guān)閉套接字。
7、s.fileno() 返回套接字的文件描述符
8、s.getpeername() 返回連接套接字的遠(yuǎn)程地址。返回值通常是元組(ipaddr,port)
9、s.getsockname() 返回套接字自己的地址。通常是一個(gè)元組(ipaddr,port)
10、s.getsockopt(level,optname[,buflen]) 返回套接字選項(xiàng)的值
11、s.gettimeout() 返回當(dāng)前超時(shí)期的值,單位是秒,如果沒有設(shè)置超時(shí)期,則返回None
12、s.recv(bufsize[,flag]) 接受套接字的數(shù)據(jù)。數(shù)據(jù)以字符串形式返回,bufsize指定要接收的最大數(shù)據(jù)量。flag提供有關(guān)消息的其他信息,通??梢院雎?br> 13、s.recvfrom(bufsize[,flag]) 與recv()類似,但返回值是(data,address)。其中data是包含接收數(shù)據(jù)的字符串,address是發(fā)送數(shù)據(jù)的套接字地址
15、s.send(string[,flag]) 將string中的數(shù)據(jù)發(fā)送到連接的套接字。返回值是要發(fā)送的字節(jié)數(shù)量,該數(shù)量可能小于string的字節(jié)大小
16、s.sendall(string[,flag]) 將string中的數(shù)據(jù)發(fā)送到連接的套接字,但在返回之前會嘗試發(fā)送所以數(shù)據(jù)。成功返回None,失敗則拋出異常
17、s.sendto(string[,flag],address) 將數(shù)據(jù)發(fā)送到套接字,address是形式為(ipaddr,port)的元組,指定遠(yuǎn)程地址。返回值是發(fā)送的字節(jié)數(shù)。該函數(shù)主要用于UDP協(xié)議。
18、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異常
19、s.setsockopt(level,optname,value) 設(shè)置給定套接字選項(xiàng)的值
20、s.settimeout(timeout) 設(shè)置套接字操作的超時(shí)期,timeou是一個(gè)浮點(diǎn)數(shù),單位是秒。值為None表示沒有超時(shí)期,一般,超時(shí)期應(yīng)該在剛創(chuàng)建套接字時(shí)設(shè)置,因?yàn)樗鼈兛赡苡糜谶B接的操作(connect())普通的非套接字實(shí)例的函數(shù)
1、getdefaulttimeout() 返回默認(rèn)的套接字超時(shí)時(shí)間(以秒為單位)。None表示不設(shè)置任何超時(shí)時(shí)間
2、gethostbyname(hostname) 將主機(jī)名(如“www.baidu.com”)轉(zhuǎn)換為IPv4地址,IP地址將以字符串的形式返回,如“8.8.8.8”。不支持IPv6
3、gethostname() 返回本地機(jī)器的主機(jī)名

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容