目錄:html
1. 異常python
2. 地址族服務器
3. 套接字類型網絡
4. 模塊方法dom
5. Socket對象與實例方法socket
socket模塊提供了Python中的低層網絡鏈接接口,用於操做套接字操做。tcp
socket模塊共定義了4種異常:ui
socket.error this
套接字相關的錯誤將會拋出該異常,伴隨的值是解釋錯誤信息的字符串或 (errno, string) 形式的系統調用異常返回。socket.error 是 IOError 的一個子類。
socket.herror
地址相關的錯誤、C API 調用等可能會拋出該異常,例如使用 h_errno 的C API,好比 gethostbyname_ex() 和 gethostbyaddr() 。伴隨的值是一個 (h_errno, string) 二元組,表明一個由庫函數調用返回的錯誤, string 描述 h_errno ,由C的 hstrerror() 函數返回。
socket.gaierror
地址相關的錯誤將會拋出該異常,例如 getaddrinfo() 和 getnameinfo() 函數。伴隨的值是一個 (error, string)二元組,表明一個由庫函數調用返回的錯誤,其中string描述error,由C的 gai_strerror() 函數返回。
socket.timeout
套接字超時時拋出該異常。套接字的超時由 實例方法settimeout() 函數設置,目前該異常的伴隨值老是字符串「timed out」。
其餘常量
socket.has_ipv6
布爾型的常量,顯示當前平臺是否支持IPV6協議。
例如:
>>> sys.platform 'win32' >>> socket.has_ipv6 True
socket.create_connection(addr[, timeout[, source_addr]])
做用:鏈接到一個監聽地址addr的TCP服務上,並返回一個新的套接字對象。這個函數比socket.connetc()更高級,若是addr(host, port)中的host是一個非數值的值,那麼該函數會同時嘗試AF_INET和AF_INET6來解析它,而後嘗試全部得到的可能地址,該方法能夠用來編寫同時支持IPv4和IPv6的客戶端。
參數:
addr —— 服務器套接字地址
timeout —— 套接字的超時限制,若是沒有提供,那麼使用getdefaulttimeout()的設置
source_address —— 若是提供的話,該參數必須是(host, port)形式的二元組,套接字會在鏈接前綁定到這個指定的地址。
返回:
返回一個鏈接到目標地址的新的套接字對象。
socket.getaddrinfo(host, port[, family[, socktype[, proto[, flags]]]])
至少須要兩個參數,將一個host/port信息轉化爲一個五元組,該五元組包含了一切連到目標host/port上須要的套接字信息。返回的五元組具備以下的形式: (family, socktype, proto, canonname, sockaddr) 。
將 host/port 參數轉化爲一個包含用於建立套接字的全部參數的5元組。host 表明域名,能夠是 IPv4/v6 地址或者 None。port 能夠是一個服務的字符串名稱如'http',也能夠是一個數字端口號或 None。傳遞 None 做爲 host 和 port 的值等價於傳遞 NULL 給底層的 C API。
參數 family, socktype 和 proto 是可選的,默認爲0,意味着選取全部的結果。參數 flags 能夠是 ‘AI_*’常量中的一個或幾個,能夠影響結果是如何被計算和返回的,默認值也是0。例如, AI_NUMERICHOST 會關閉域名查詢,若是 host 是一個域名,那麼這裏將會拋出一個異常。
該函數返回一個5元組,5元組的結構以下:
(family, socktype, proto, canonname, sockaddr)
其中 family,socktype,proto 全是整數,用於傳遞給 socket() 函數。
canonname will be a string representing the canonical name of the host if AI_CANONNAME is part of the flags argument; else canonname will be empty.
sockaddr 是一個描述套接字地址的元組,其格式依賴於返回結果中的 family (好比 family 是 AF_INET 時 sockaddr 是一個 (address, port) 二元組;而當 family 是 AF_INET6 時 sockaddr 是一個 (address, port, flow info, scope id) 四元組),該部分的結果能夠傳遞給 socket.connect() 方法。
下面的例子給出了一個獲取HTTP鏈接到www.python.org的80端口的鏈接信息:
>>> socket.getaddrinfo("www.python.org", 80, 0, 0, socket.IPPROTO_TCP) [(2, 1, 6, '', ('82.94.164.162', 80)), (10, 1, 6, '', ('2001:888:2000:d::a2', 80, 0, 0))]
socket.getfqdn(name='')
做用:返回參數的全稱域名(fully qualified domain name string),若是參數name='',那麼將會返回本地主機的全稱域名
參數:字符串name,是要查詢的目標主機名;
返回值:返回目標主機的全稱域名。
socket.gethostbyname(hostname)
做用:將主機名翻譯成IPv4地址,不支持IPv6的域名解析
參數:
hostname——目標主機的域名
返回:目標主機的IPv4地址
socket.gethostname()
做用:獲取當前主機的主機名;
參數:無
返回:當前主機的主機名。
socket.gethostbyaddr(ip_address)
做用:返回目標IP地址的一些信息;
參數:ip_address——目標IP地址;
返回值:三元組 (hostname, aliaslist, ipaddrlist) ,其中:
hostname: 給定ip_address的主要主機名(primary host name);
aliaslist: 給定ip_address的備用主機名(alternative host names)構成的列表,可能爲空;
ipaddrlist: 給定ip_address主機的IP地址列表,極可能只有一個IP地址。
socket.gethostbyname_ex(hostname)
做用:效果等用於 gethostbyaddr() ,可是參數hostname既能夠是IP地址,也能夠是目標主機名;
參數:hostname——點分式的IP地址或DNS主機名;
返回值:返回值的形式等同於 gethostbyaddr() 。
socket.getnameinfo(sockaddr, flags)
做用:將sockaddr轉成(host, port)形式的二元組形式。
參數:
sockaddr —— 二元組,首元能夠是IP地址,也能夠是域名;次元是端口;
flags —— 一般是0。
返回:(host, port)形式的二元組,目標地址的IP地址和端口。
socket.getprotobyname(protocolname)
做用:得到網絡協議名(如:'icmp')對應的值,能夠用來傳遞給 socket() 函數做爲可選的第三個參數,一般只用於以「raw」(SOCK_RAW)方式打開的套接字。對於正常的套接字,通常協議值會自動選取。
參數:
protocolname —— 網絡協議名,如「icmp」、「tcp」等
返回:網絡協議名對應的值。
socket.getservbyname(servicename[, protocolname])
做用:返回一個服務註冊綁定的端口號,如FTP是21,SSH是22等。
參數:
servicename —— 要查詢的服務的名稱;
protocolname —— 可選,取值'tcp' 或 'udp'。
返回:
目標服務註冊監聽的端口號。
socket.getservbyport(port[, protocolname])
做用:與 getservbyname() 恰好相反,能夠經過指定端口號查詢通常狀況下是哪些服務註冊監聽這些端口。
參數:
port —— 目標端口號,
protocolname —— 可選,取值'tcp' 或 'udp'。
返回:
一般監聽目標端口的服務名稱。
socket.socketpair([family[, type[, proto]]])
做用:(只在Unix平臺上可用)建立一對鏈接的套接字對象。
參數:參數family, type, proto同 socket.socket() 方法。不過,若是平臺定義了的話,默認的地址族是AF_UNIX,不然是AF_INET。
返回:一個二元組,包含兩個已經鏈接的套接字對象。
socket.fromfd(fd, family, type[, proto])
做用:(只在Unix平臺上可用)Duplicate the file descriptor fd (an integer as returned by a file object’s fileno() method) and build a socket object from the result. Address family, socket type and protocol number are as for the socket() function above. The file descriptor should refer to a socket, but this is not checked — subsequent operations on the object may fail if the file descriptor is invalid. This function is rarely needed, but can be used to get or set socket options on a socket passed to a program as standard input or output (such as a server started by the Unix inet daemon). The socket is assumed to be in blocking mode.
socket.ntohl(x)
做用:將32位網絡字節序的正整型轉換成主機字節序;
參數:x——4字節網絡字節序的正整型;
返回:適合主機字節序的相同整數。
socket.ntohs(x)
做用:將16位網絡字節序的正整型轉換成主機字節序;
參數:x——2字節網絡字節序的正整型;
返回:適合主機字節序的相同整數。
socket.htonl(x)
做用:將32位主機字節序的正整型轉換成32位網絡字節序的整型;
參數:x——4字節正整數;
返回:4字節網絡字節序的相同整型變量。
socket.htons(x)
做用:將16位的主機字節序的正整數轉換成16位網絡字節序整型;
參數:x——2字節正整數;
返回:2字節網絡字節序的相同整型變量。
socket.inet_aton(ip_string)
做用:將IPv4點分地址轉換成32位二進制數(4字節長的字符串)的格式,不支持IPv6。
參數:點分格式的IPv4地址
返回:4字節打包後的字符串
socket.inet_ntoa(packed_ip)
做用:將32位打包的IPv4地址轉換成點分形式,不支持IPv6。
參數:4字節打包後的IPv4地址
返回:對應IP地址的點分形式
socket.inet_pton(address_family, ip_string)
做用:將一個IP地址由它的地址族對應的字符串形式轉換成打包後的二進制格式,支持IPv4和IPv6.
參數:
address_family——AF_INET 或 AF_INET6;
ip_string——IP地址串
返回:對應IP地址打包後的二進制形式。
socket.inet_ntop(address_family, packed_ip)
做用:將一個IP地址由它的地址族對應的字符串形式轉換成打包後的二進制格式,支持IPv4和IPv6。
參數:
address_family——AF_INET 或 AF_INET6;
packed_ip——網絡格式的,打包後的二進制形式的IP地址
返回:IPv4或IPv6的普通字符串形式的IP地址。
socket.getdefaulttimeout()
做用:返回默認的套接字超時時限(單位:秒)。
參數:不用參數;
返回值:
浮點數——默認的套接字超時秒數;
None——套接字沒有默認的超時限制。
socket.setdefaulttimeout(timeout)
做用:設置默認的套接字超時。
參數:
返回: