MicroMython标准库函数usocket
原创版权归山东萝卜科技有限公司所有,转载必须以链接形式注明作者和原始出处。
BSD 套接字接口
查看 CPython 对应的模块 进行比较
Socket 地址格式
下面函数使用 ipv4 格式(地址:端口)网络地址, ipv4 地址是由点和数字组成的字符串,如 "8.8.8.8",端口是 1-65535 的数字。注意不能使用域名做为 ipv4 地址,域名需要先用 socket.getaddrinfo() 进行解析。
函数
socket.socket(socket.AF_INET, socket.SOCK_STREAM, socket.IPPROTO_TCP)
创建新的套接字,使用指定的地址、类型和协议号。
socket.getaddrinfo(host, port)
传递 主机/端口 到一个5个数据的元组。元组列表的结构如下:
(family, type, proto, canonname, sockaddr)
下面显示了怎样连接到一个网址:
s = socket.socket() s.connect(socket.getaddrinfo('www.micropython.org', 80)[0][-1])
socket.AF_INET
family 类型
socket.SOCK_STREAM socket.SOCK_DGRAM
socket 类型
socket.IPPROTO_UDP socket.IPPROTO_TCP
套接字类型
方法
socket.close()
关闭套接字。一旦关闭后,套接字所有的功能都将失效。远端将接收不到任何数据 (清理队列数据后)。
在回收垃圾时套接字会自动关闭,但还是推荐在必要时用 close() 去关闭,或, or to use a with statement around them.
socket.bind(address)
将套接字绑定到地址,套接字不能是已经绑定的。
socket.listen([backlog])
允许服务器接收连接。如果指定了 backlog,它不能小于0 (如果小于0将自动设置为0);超出后系统将拒绝新的连接。如果没有指定,将使用默认值。
socket.accept()
接收连接。套接字需要指定地址并监听连接。返回值是 (conn, address),其中conn是用来接收和发送数据的套接字,address是绑定到另一端的套接字。
socket.connect(address)
连接到指定地址的远端套接字。
socket.send(bytes)
发送数据。套接字需要已连接到远程。
socket.sendall(bytes)
发送数据。套接字已连接到远程。
socket.recv(bufsize)
接收数据,返回值是数据字节对象。bufsize是接收数据的最大数量。
socket.sendto(bytes, address)
发送数据。套接字没有连接到远程,目标套接字由地址参数指定。
socket.recvfrom(bufsize)
接收数据。返回值是 (bytes, address),其中 bytes 是字节对象,address 是发送数据的套接字。
socket.setsockopt(level, optname, value)
设置套接字参数。需要的符号常数定义在套接字模块 (SO_* 等)。value 可以是整数或字节对象。
socket.settimeout(value)
设置阻塞套接字超时时间。value 参数可以是代表秒的正浮点数或 None。如果设定大于 0 的参数,在后面套接字操作超出指定时间后将引起 timeout 异常。如果参数是 0,套接字将使用非阻塞模式。如果是 None,套接字使用阻塞模式。
socket.setblocking(flag)
设置阻塞或非阻塞模式: 如果 flag 是 false,设置非阻塞模式。
这是调用 settimeout() 的一种简便方法:
sock.setblocking(True) #等于 sock.settimeout(None) sock.setblocking(False) #等于 sock.settimeout(0.0)
socket.makefile(mode='rb')
返回关联到套接字的文件对象,返回值类型与指定的参数有关。仅支持二进制模式 (‘rb’ 和 ‘wb’),CPython 的 encoding、errors 和 newline 不被支持。
套接字必须是阻塞模式,它可以指定超时,但是当发生超时异常后文件内部缓存状态可能不一致。
和 CPython 的不同
关闭文件也会同时关闭套接字。
socket.read(size)
读取指定字节数据,返回参数是字节对象。如果没有指定 size,结果和 socket.readall() 相同。
socket.readall()
读取全部数据,直到 EOF。函数直到套接字关闭才返回。
socket.readinto(buf[, nbytes])
读取到缓冲区。如果指定了 nbytes,那么最多只读取 nbytes 字节,否则最多读取 len(buf) 字节。
返回值是读取的字节数。
socket.readline()
读取一行,以换行符结束。
返回读取的数据行。
socket.write(buf)
写入缓冲区数据。
返回值是写入的数据数量。