8901|17

129

帖子

1

TA的资源

一粒金砂(中级)

楼主
 

【micropython教程】网络编程第一篇#熟悉usocket模块# [复制链接]

 
 
本帖最后由 zy459994202 于 2018-5-9 08:45 编辑

usocket – 套接字模块

  • MicroPython 提供丰富的网络功能,可以加快物联网项目的开发进程。了解网络功能之后,就可以将产品轻松的接入网络,实现更多物联网功能。在使用 MicroPython 进行网络编程首先需要了解的就是 usocket 模块,usocket 模块提供对BSD套接字接口的访问。

常数

地址簇

  • socket.AF_INET =2 — TCP/IP – IPv4
  • socket.AF_INET6 =10 — TCP/IP – IPv6

套接字类型

  • socket.SOCK_STREAM =1 — TCP流
  • socket.SOCK_DGRAM =2 — UDP数据报
  • socket.SOCK_RAW =3 — 原始套接字
  • socket.SO_REUSEADDR =4 — socket可重用

IP协议号

  • socket.IPPROTO_TCP =16
  • socket.IPPROTO_UDP =17

套接字选项级别

  • socket.SOL_SOCKET =4095

函数

socket.socket(socket.AF_INET, socket.SOCK_STREAM, socket.IPPROTO_TCP)

创建新的套接字,使用指定的地址、类型和协议号。

socket.getaddrinfo(host, port)

将主机域名(host)和端口(port)转换为用于创建套接字的5元组序列。元组列表的结构如下:

(family, type, proto, canonname, sockaddr)

示例:

>>> info = socket.getaddrinfo("rt-thread.org", 10000)
>>> print(info)
[(2, 1, 0, '', ('118.31.15.152', 10000))]

socket.close()

关闭套接字。一旦关闭后,套接字所有的功能都将失效。远端将接收不到任何数据 (清理队列数据后)。 虽然在垃圾回收时套接字会自动关闭,但还是推荐在必要时用 close() 去关闭。

socket.bind(address)

将套接字绑定到地址,套接字不能是已经绑定的。

socket.listen([backlog])

监听套接字,使服务器能够接收连接。

backlog:接受套接字的最大个数,至少为0,如果没有指定,则默认一个合理值。

socket.accept()

接收连接请求。 注意: 只能在绑定地址端口号和监听后调用,返回 conn 和 address。

conn:新的套接字对象,可以用来收发消息
address:连接到服务器的客户端地址

socket.connect(address)

连接服务器。

address:服务器地址和端口号的元组或列表

socket.send(bytes)

发送数据,并返回成功发送的字节数,返回字节数可能比发送的数据长度少。

bytes:bytes类型数据

socket.recv(bufsize)

接收数据,返回接收到的数据对象。

bufsize:指定一次接收的最大数据量

示例:

data = conn.recv(1024)

socket.sendto(bytes, address)

发送数据,目标由address决定,常用于UDP通信,返回发送的数据大小。

bytes:bytes类型数据
address:目标地址和端口号的元组

示例:

data = sendto("hello RT-Thread", ("192.168.10.110", 100))

socket.recvfrom(bufsize)

接收数据,常用于UDP通信,并返回接收到的数据对象和对象的地址。

bufsize:指定一次接收的最大数据量

示例:

data,addr=fd.recvfrom(1024)

socket.setsockopt(level, optname, value)

根据选项值设置套接字。

level:套接字选项级别
optname:套接字的选项
value:可以是一个整数,也可以是一个表示缓冲区的bytes类对象。

示例:

s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

socket.settimeout(value)

设置超时时间,单位:秒。 示例:

s.settimeout(2)

socket.setblocking(flag)

设置阻塞或非阻塞模式: 如果 flag 是 false,设置非阻塞模式。

socket.read([size])

Read up to size bytes from the socket. Return a bytes object. If size is not given, it reads all data available from the socket until EOF; as such the method will not return until the socket is closed. This function tries to read as much data as requested (no “short reads”). This may be not possible with non-blocking socket though, and then less data will be returned.

socket.readinto(buf[, nbytes])

Read bytes into the buf. If nbytes is specified then read at most that many bytes. Otherwise, read at most len(buf) bytes. Just as read(), this method follows “no short reads” policy. Return value: number of bytes read and stored into buf.

socket.readline()

接收一行数据,遇换行符结束,并返回接收数据的对象 。

socket.write(buf)

将字节类型数据写入套接字,并返回写入成功的数据大小。

示例

TCP Server example

>>> import usocket 
>>> s = usocket.socket(usocket.AF_INET,usocket.SOCK_STREAM)  # Create STREAM TCP socket
>>> s.bind(('192.168.12.32', 6001))   
>>> s.listen(5)
>>> s.setblocking(True)
>>> sock,addr=s.accept()              
>>> sock.recv(10)                    
b'rt-threadr'
>>> s.close()

TCP Client example

>>> import usocket 
>>> s = usocket.socket(usocket.AF_INET,usocket.SOCK_STREAM)
>>> s.connect(("192.168.10.110",6000))  
>>> s.send("micropython")               
11
>>> s.close()

connect to a web site example:

s = socket.socket()
s.connect(socket.getaddrinfo('www.micropython.org', 80)[0][-1])
原创的哦,如需转载或用于商业用途需征得作者同意并注明出处

最新回复

谢谢分享 要搞个在以太网上跑跑就好了。  详情 回复 发表于 2018-8-13 11:36
点赞 关注(2)
 
 

回复
举报

1903

帖子

0

TA的资源

版主

沙发
 
学习了

点评

在网络编程方便 MicroPython 还是很大优势的,写起来很简单,联网容易。  详情 回复 发表于 2018-5-9 10:35
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
学习了

点评

一起玩啊  详情 回复 发表于 2018-5-9 10:35
 
 
 

回复

129

帖子

1

TA的资源

一粒金砂(中级)

4
 

在网络编程方便 MicroPython 还是很大优势的,写起来很简单,联网容易。
 
 
 

回复

129

帖子

1

TA的资源

一粒金砂(中级)

5
 
 
 

回复

1903

帖子

0

TA的资源

版主

6
 
我目前在研究纯Python的,还没研究micropython

点评

一样的,mp的目标就是让编程和用CPython一样简单。  详情 回复 发表于 2018-5-9 11:41
 
 
 

回复

129

帖子

1

TA的资源

一粒金砂(中级)

7
 
star_66666 发表于 2018-5-9 10:59
我目前在研究纯Python的,还没研究micropython

一样的,mp的目标就是让编程和用CPython一样简单。只不过 MP 可以在嵌入式平台上运行。
 
 
 

回复

1万

帖子

25

TA的资源

版主

8
 
mpy的网络功能的确非常方便,可惜的是现在支持的网络硬件模块还比较少。

点评

一般就是一些小的硬件,比如 esp8266 32等,自带WiFi,我想以后类似的硬件会越来越多。 现在联网功能已经越来越重要了。  详情 回复 发表于 2018-5-9 14:14
 
 
 

回复

1903

帖子

0

TA的资源

版主

9
 
是的吗?

点评

是啊, 我感觉是简化了很多操作  详情 回复 发表于 2018-5-9 14:14
 
 
 

回复

129

帖子

1

TA的资源

一粒金砂(中级)

10
 
dcexpert 发表于 2018-5-9 12:56
mpy的网络功能的确非常方便,可惜的是现在支持的网络硬件模块还比较少。

一般就是一些小的硬件,比如 esp8266 32等,自带WiFi,我想以后类似的硬件会越来越多。
现在联网功能已经越来越重要了。
 
 
 

回复

129

帖子

1

TA的资源

一粒金砂(中级)

11
 

是啊, 我感觉是简化了很多操作
 
 
 

回复

1903

帖子

0

TA的资源

版主

12
 
不错啊,支持

点评

谢谢支持  详情 回复 发表于 2018-5-9 17:19
 
 
 

回复

129

帖子

1

TA的资源

一粒金砂(中级)

13
 

谢谢支持
 
 
 

回复

1903

帖子

0

TA的资源

版主

14
 
加油,多分享
 
 
 

回复

129

帖子

1

TA的资源

一粒金砂(中级)

15
 
 
 

回复

1903

帖子

0

TA的资源

版主

16
 
呵呵
 
 
 

回复

6105

帖子

4

TA的资源

版主

17
 
谢谢分享 要搞个在以太网上跑跑就好了。

点评

开发板能联网就可以啦  详情 回复 发表于 2018-8-13 11:49
 
 
 

回复

129

帖子

1

TA的资源

一粒金砂(中级)

18
 
damiaa 发表于 2018-8-13 11:36
谢谢分享 要搞个在以太网上跑跑就好了。

开发板能联网就可以啦
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表