MicroMython标准库函数usocket | MicroPython库 | 技术支持 | MicroPython


当前位置:首页>技术支持>MicroPython库>MicroMython标准库函数usocket

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)

写入缓冲区数据。

返回值是写入的数据数量。