当前位置:首页>技术文档>底层类库>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)

         写入缓冲区数据。


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