python --- socket模塊詳解
socket常用功能函數:
socket.socket(family=AF_INET, type=SOCK_STREAM, proto=0, fileno=None) #創建socket對象
socket families(地址簇):
AF_UNIX —————————— unix本機之間進行通信
AF_INET —————————— 使用IPv4
AF_INET6 —————————— 使用IPv6
註:socket.socket()中第一個能使用上述值。
socket types:
SOCK_STREAM # TCP套接字類型
SOCK_DGRAM # UDP套接字類型
SOCK_RAW #原始套接字類型,這個套接字比較強大,創建這種套接字可以監聽網卡上的所有數據幀
SOCK_RDM #是一種可靠的UDP形式,即保證交付數據報但不保證順序。SOCK_RAM用來提供對原始協議的低級訪問,在需要執行某些特殊操作時使用,如發送ICMP報文。SOCK_RAM通常僅限於高級用戶或管理員運行的程序使用。
註:這些常量都是套接字類型,應用於socket()
函數中的第二個參數中.根據系統的不同,可能有更多的常數。(只有SOCK_STREAM
和SOCK_DGRAM
似乎通常很有用。)
協議號通常為零,可以省略,或者在地址族為AF_CAN
的情況下,協議應為CAN_RAW
或CAN_BCM
。如果指定fileno,則忽略其他參數,從而導致具有指定文件描述器的套接字返回。與socket.fromfd()
不同,fileno將返回相同的套接字,而不是重復。這可能有助於使用socket.close()
關閉分離的套接字,一般情況下後兩個參數忽略即可。
socket.bind(address) #將socket綁定到地址(常用於服務端)
address地址的格式取決於地址族, 在AF_INET下,以元組(host,port)的形式表示地址。
socket.listen([backlog]) #啟用服務器以接受連接(常用於服務端)。
backlog >=0,指定系統在拒絕新連接之前將允許的未接受連接的數量。如果未指定,則選擇默認的合理值。
socket.accept() #接收一個連接.該socket 必須要綁定一個地址和監聽連接.返回值是一對(conn,address)。(常用於服務端)
conn是socket對象,可以在該連接上發送和接收數據,address是連接另一端的地址。
socket.recv(bufsize[, flags]) #從socket接收數據,返回值是一個代表所收到的數據的字節對象。
一次性接收的最大數據量由bufsize指定, 參數flags通常忽略。
socket.send(data[, flags]) #將數據發送到socket。
python3中只能發送bytes類型的數據。
socket.connect(address) #連接到遠程socket(常用於客戶端)
如果連接被信號中斷,則該方法等待直到連接完成,或者如果信號處理程序沒有引發異常並且套接字正在阻塞或者已經阻塞,則在超時時引入socket.timeout
超時。對於非阻塞套接字,如果連接被信號中斷(或由信號處理程序引發的異常),則該方法引發InterruptedError
異常。
socket.close() #關閉socket
註:被調用後,連接斷開,socket不能在發送數據,連接另一端也將不在接收數據。
python --- socket模塊詳解