标签:
目录:
socket模块提供了Python中的低层网络连接接口,用于操作套接字操作。
socket模块共定义了4种异常:
socket.error
套接字相关的错误将会抛出该异常,伴随的值是解释错误信息的字符串或 (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() 函数的第一个参数,当然, AF_UNIX 只用于类UNIX平台,如果前者没有被定义,那么该协议对应的地址族都不可用。
socket.AF_UNIX
属于该类型的地址就是一个字符串。AF_UNIX对应的数值是:1。
socket.AF_INET
(host, port)形式的二元组。AF_INET对应的数值是:2。
socket.AF_INET6
(host, port, flowinfo, scopeid)形式的四元组。AF_INET6对应的数值是:23。
套接字类型用于 socket() 函数的第二个参数,但是只有 SOCK_STREAM 和 SOCK_DGRAM 是比较常见的。
socket.SOCK_STREAM
面向流(TCP连接)的套接字,实际的数值是:1。
socket.SOCK_DGRAM
面向数据报(UDP连接)的套接字,实际的数值是:2。
socket.SOCK_RAW
实际的数值是:3。
socket.SOCK_RDM
实际的数值是:4。
socket.SOCK_SEQPACKET
实际的数值是:5。
其他常量
socket.has_ipv6
布尔型的常量,显示当前平台是否支持IPV6协议。
socket.create_connection(addr[, timeout[, source_addr]])
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])
socket.gethostbyname(hostname)
将主机名翻译成IPv4地址。
socket.gethostbyname_ex(hostname)
socket.gethostname()
socket.gethostbyaddr(ip_address)
socket.getnameinfo(sockaddr, flags)
socket.getprotobyname(protocolname)
socket.getservbyname(servicename[, protocolname])
socket.getservbyport(port[, protocolname])
socket.socket([family[, type[, proto]]])
socket.socketpair([family[, type[, proto]]])
socket.fromfd(fd, family, type[, proto])
socket.ntohl(x)
socket.ntohs(x)
socket.htonl(x)
socket.htons(x)
socket.inet_aton(ip_string)
socket.inet_ntoa(packed_ip)
socket.inet_pton(address_family, ip_string)
socket.inet_ntop(address_family, packed_ip)
socket.getdefaulttimeout()
socket.setdefaulttimeout(timeout)
socket.accept()
作用:接受一个连接,能够调用该方法的套接字必须(1). 已经绑定到一个特定的地址,并且(2). 监听连接。
返回值: (conn, addr) 形式的二元组,其中:
conn :连接到本套接字上来的新的套接字对象,可以用来收发消息。
addr :连接到本套接字上来的套接字对象的网络地址。
socket.bind(address)
作用:将套接字绑定到一个地址上,前提是套接字尚未被绑定到某个地址;
参数:符合创建该套接字时声明的地址族格式的地址;
返回值:试图绑定一个已经绑定的套接字将抛出 socket.error 。正常调用时返回值为空。
socket.close()
作用:关闭套接字,套接字关闭后,所有针对已关闭套接字的操作都会失败。套接字被GC的时候,会自动关闭。关闭套接字会释放连接占用的资源,但是并不一定立刻关闭连接,如果想要及时关闭连接,应该在 close() 前调用 shutdown() 。
参数:不需要参数;
返回值:返回值为空。
socket.connect(address)
作用:连接到一个远程的套接字。
参数:符合创建该套接字时声明的地址族格式的地址;
返回值:返回值为空。
socket.connect_ex(address)
socket.fileno()
作用:返回套接字的fd,套接字的fd可以用于select机制等;
参数:调用时不需要参数;
返回值:当前套接字的fd,windows下这个值不能用于类似 os.fdopen() 这样直接根据fd操作的函数,类UNIX系统上没有这个限制。
socket.getpeername()
作用:获取该套接字连接到的远程套接字的地址。
参数:调用时不需要参数;
返回值:远程连接套接字的地址,具体的形式取决于套接字的地址族。
socket.getsockname()
作用:返回某个套接字自己的地址。
参数:调用时不需要参数;
返回值:当前套接字的地址,具体的形式取决于套接字的地址族。
socket.getsockopt(level, optname[, buflen])
作用:返回给定套接字的某些参数;
参数:
level:
optname:
buflen:
返回值:
socket.ioctl(control, option)
socket.listen(backlog)
作用:监听连接到该套接字上的连接。
参数:backlog指定该套接字可以容纳的最大连接数,至少应该是0;
返回值:返回值为空。
socket.makefile([mode[, bufsize]])
socket.recv(bufsize[, flags])
作用:从套接字中接收数据
参数:
bufsize -- 最大接收的数据长度,通常应该设为2的指数次;
flags -- 默认为0,和UNIX recv(2)中的参数flags的含义相同,
返回值:接收到的字符串数据。
socket.recvfrom(bufsize[, flags])
作用:
参数:
返回值:(string, address)形式的二元组,string是接收到的数据,address则是发送这个数据的套接字的地址,具体的地址形式则取决于套接字所属的地址族。
socket.recvfrom_into(buffer[, nbytes[, flags]])
socket.recv_into(buffer[, nbytes[, flags]])
socket.send(string[, flags])
socket.sendall(string[, flags])
socket.sendto(string, address)
socket.sendto(string, flags, address)
socket.setblocking(flag)
作用:设置一个套接字的阻塞状态。
参数:flags -- 为0时将套接字设为非阻塞,为1时将套接字设为阻塞。默认情况下,初始创建的套接字都是阻塞的。非阻塞状态下,如果recv()函数没有获取到任何数据或者send()函数没有立刻发出数据,都会抛出socket.error异常;而在阻塞模式下,这些调用会阻塞直到能够继续为止。 s.setblocking(0) 等价于 s.settimeout(0.0) ,而 s.setblocking(1) 等价于 s.settimeout(None) 。
返回值:返回值无意义。
socket.settimeout(value)
作用:
参数:
返回值:
socket.gettimeout()
socket.setsockopt(level, optname, value)
socket.shutdown(how)
作用:关闭连接的一端或两端一起关闭;
参数:
how -- 以何种方式关闭连接—— SHUT_RD 此后不能再读(receive); SHUT_WR 此后不能再写(send); SHUT_RDWR 此后不能读写。根据平台的不同,关闭连接的一端可能导致另一端也同样关闭。
返回值:
Socket对象的只读属性
socket.family
对应于创建套接字时传入的地址族,但是显示的是数值。
socket.type
对应于创建套接字时传入的套接字类型,但是显示的是数值。
socket.proto
标签:
原文地址:http://www.cnblogs.com/Security-Darren/p/4177717.html