python socket recvfrom_Python socket学习笔记(一)
最近在看 Python的視頻,針對socket 編程做一個筆記
一、socket是什么?
socket 通常也稱為“套接字”,用于描述 IP 地址和端口,是一個通訊鏈的句柄。應用程序通常通過 “套接字”向網絡發出請求或者應答網絡請求。說白了,就是一種通訊機制。它類似于公司的電話客服部門,你打電話的時候,那邊會分配一個人回答你的問題,客服部門就相當于 socket 的服務器端了,打電話的人相當于客戶端了,在和你通話結束前,如果有人在想找和你通話的哪個客服人員,是不可能的,因為你在和他通話,當然客戶部門的電話交換機也不會重復分配。
socket 起源于 Unix,而Unix/Linux 基本哲學之一就是“一切皆文件”,都可以用 “打開open ->讀寫 wirte/read? -> 關閉 close “模式來操作。 Socket就是該模式的一個實現, socket即時一種特殊的文件,一些 socket函數就是對其進行操作(讀/寫IO、打開、關閉)
socket 的工作模式
Socket 服務器端 編程主要包括以下幾步
打開 socket
綁定到一個地址和端口
偵聽進來的連接
接受連接
讀取數據
Socket type
socket.AF_UNIX 只能夠用于單一的 Unix 系統進程間通信
socket.AF_INET 服務器之間網絡通信
socket.AF_INET6 IPv6
socket.SOCK_STREAM 流式socket,for TCP
socket.SOCK_DGRAM 數據報式socket, for UDP
socket.SOCK_RAW 原始套接字,普通的套接字無法處理ICMP、IGMP等網絡報文,而SOCK_RAW可以;其次,SOCK_RAW也可以處理特殊的IPv4報文,此外,利用原始套接字,可以通過 IP_HDRINCL套接字選項由用戶構造IP頭
socket.SOCK_RDM 是一種可靠的UDP形式,即保證交付數據報但不保證順序。SOCK_RDM用來提供對原始協議的低級訪問,在需要執行某些特殊操作時使用,如發送ICMP報文。
SOCK_RAM 通常僅限于高級用戶或管理員運行的程序使用
socket.SOCK_SEQPACKET 可靠的連續數據包服務
Socket 函數
socket(family,type[,protocal]) 使用給定的地址族、套接字類型、協議編號(默認為0)來創建套接字
套接字的實例具有以下方法:
1、s.bind(address) 將套接字綁定到地址。address地址的格式取決于 地址族。 在AF_INET下,以元祖(host,port)的形式表示地址2、s.listen(backlog) 開始監聽傳入連接。backlog指定在拒絕連接之前,操作系統可以掛起的最大連接數量。該值至少為1,大部分應用程序設置為5就可以了。3、s.connect(address) 連接到address 處額套接字,一般,address的格式為元組(hostname,port),如果連接同一臺機器上的服務器,可以將hostname 設置為 ‘localhost’. 如果連接出錯,返回 socket.error 錯誤。4、s.connect_ex(address) 功能與 connect(address) 相同,但是成功返回 0,失敗返回 errno 的值。5、s.accept() 接受連接并返回(conn,address),其中conn是新的套接字對象,可以用來接收和發送數據,address時候連接客戶端的地址。6、s.close() 關閉套接字。7、s.fileno() 返回套接字的文件描述符8、s.getpeername() 返回套接字的遠程地址。返回值通常是元組(ipaddr,port)9、s.getsockname() 返回套接字自己的地址。通常是一個元組(ipaddr,port)10、s.getsockopt(level,optname[,buflen]) 返回套接字選項的值11、s.gettimeoout() 返回當前超時期的值,單位是秒,如果沒有設置超時期,則返回None12、s.recv(bufsize [,flag]) 接受套接字的數據。數據以字符串形式返回,bufsize 指定要接受的最大數據量。flag 提供有關信息的其他信息,通常可以忽略。13、s.recvfrom(bufsize [,flag]) 與 recv() 類似,但返回值是(data,address)。其中data是包含接收數據的字符串,address是發送數據的套接字地址14、s.send(string [,flag]) 將 string 中的數據發送到連接的套接字,返回值是要發送的字節數量,該數量可能小于 string的字節大小。15、s.sendall(string [,flag]) 將 string中的數據發送到連接的套接字,但在返回之前會嘗試發送所有數據。成功為None,失敗則拋出異常16、s.sendto(string[,flag],address) 將數據發送給套接字,address是形式為(ipaddr,port)的元組,指定遠程地址。返回值是發送的字節數。該函數主要用于UDP協議17、s.setblocking(flag) 如果flag為0,則將套接字設為非阻塞模式,否則將套接字設置為阻塞模式(默認值)。非阻塞模式下,如果調用 recv() 沒有發現任何數據,或 send() 調用無法立即發送數據,那么將引起 socket.error 異常18、s.setsocketopt(level,optname,value) 設置給定套接字選項的值19、s.settimeout(timeout) 設置套接字操作的超時期,timeout 是一個浮點數,單位是秒。值為 None 表示沒有超時期。一般,超時期應該在剛創建套接字的時候后設置,因為他們可能用于連接的操作(如 connect())
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的python socket recvfrom_Python socket学习笔记(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 打了鸡血一样是什么意思 网络语打了鸡血一
- 下一篇: 邮箱批量登录接验证码_记一次莫名的需求(