python网络编程模块socket用法介绍

  • 2017-01-14 15:00:44
  • 开发
  • 42
  • shevechco

socket模块是Python网络编程的核心模块,通过它可以实现各种网络通信功能,从简单的 TCP/UDP 连接到复杂的网络服务开发。
socket模块提供了访问 BSD 套接字的接口,在现代 Unix 系统、Windows、macOS 等众多平台上均可使用,但在 WebAssembly 平台(wasm32-emscripten和wasm32-wasi)上不可用。它将 Unix 系统调用和套接字库接口以面向对象的风格呈现给 Python 开发者,通过socket()函数返回的套接字对象,开发者可以方便地调用各种套接字系统调用方法。
套接字协议族与地址格式

协议族

地址格式

描述

AF_UNIX

字符串

用于绑定文件系统节点,在 Linux 中,抽象命名空间的地址会以带有初始 null 字节的字节类对象返回

AF_INET

(host, port)

元组 host为互联网域名或 IPv4地址,port为整数端口号,特殊形式''代表INADDR_ANY,'<broadcast>'代表INADDR_BROADCAST,但不兼容 IPv6

AF_INET6

(host, port, flowinfo, scope_id)四元组

用于 IPv6 地址,flowinfo和scope_id可省略,但省略scope_id可能在操作特定 IPv6 地址时出错

AF_NETLINK

(pid, groups)元组

用于AF_NETLINK套接字

AF_BLUETOOTH

不同协议有不同格式

如BTPROTO_L2CAP接受(bdaddr, psm),bdaddr为蓝牙地址字符串,psm为整数

socket模块的异常

异常类型

描述

socket.error

OSError的别名,已弃用,用于表示与套接字相关的一般错误

socket.herror

OSError的子类,通常表示与地址相关的错误,如gethostbyname_ex()和gethostbyaddr()函数引发的错误

socket.gaierror

OSError的子类,由getaddrinfo()和getnameinfo()引发,用于表示地址相关的错误

socket.timeout

TimeoutError的别名,当套接字操作超时时抛出,前提是事先启用了超时设置

socket模块的函数

socket.socket(family=AF_INET, type=SOCK_STREAM, proto=0, fileno=None) 
根据指定的地址族、套接字类型和协议号创建新的套接字。例如,创建一个用于TCP通信的IPv4套接字 socket.socketpair([family[, type[, proto]]])
构建一对已连接的套接字对象,常用于进程间通信。默认地址族为平台定义的AF_UNIX,若未定义则为AF_INET socket.create_connection(address, timeout=GLOBAL_DEFAULT, source_address=None, \*, all_errors=False)
用于连接到指定地址的 TCP 服务,会自动解析主机名并尝试连接多个可能的地址,方便编写兼容 IPv4 和 IPv6 的客户端 socket.create_server(address, \*, family=AF_INET, backlog=None, reuse_port=False, dualstack_ipv6=False)
创建绑定到指定地址的 TCP 套接字,family指定地址族,backlog设置连接队列大小,reuse_port可设置SO_REUSEPORT选项,dualstack_ipv6用于控制是否支持 IPv4 和 IPv6 连接

套接字对象方法

方法

描述

accept()

接受连接,返回新的套接字对象和客户端地址,新套接字不可继承

bind(address)

将套接字绑定到指定地址,不同协议族地址格式不同

close()

关闭套接字,建议显式调用或使用with语句,确保资源及时释放

connect(address)

连接到远程套接字,处理信号中断的方式在不同 Python 版本中有变化

connect_ex(address)

类似connect(),但返回错误指示器而非抛出异常,便于异步连接处理

recv(bufsize[, flags])

从套接字接收数据,bufsize指定接收缓冲区大小

recvfrom(bufsize[, flags])

接收数据并返回数据和发送端地址

send(data[, flags])

向套接字发送数据,data为字节串对象

sendto(data, address[, flags])

向指定地址发送数据,常用于 UDP 套接字

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.sulao.cn/post/312

相关推荐