当前位置: 首页 > 工具软件 > usocket > 使用案例 >

咸鱼Micropy标准库—usocket模块

林运浩
2023-12-01

查看micropython标准库

usocket模块提供了BSD套接字访问接口,和CPython有以下不同
● CPython使用的socket.error异常现在已经废弃了,它是OSError的别名函数。MicroPython直接使用OSError。
● 为了保证高效率和一致性,MicroPython的socket对象直接使用了流(类似文件)接口。在CPython中,需要使用makefile()方法将 socket进行转换。MicroPython也支持这种方法(但是不常用),如果需 要兼容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)
    写入缓冲区数据。

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

 类似资料: