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