天天看點

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不能在發送資料,連接配接另一端也将不在接收資料。