Ameba MicroPython: [RTL8722CSM] [RTL8722DM] Socket

class socket – Socket 网路编程
示例
Echo服务器与客户端:
• 准备材料: Ameba x 2
• 步骤:
WiFi连接完成后即可使用Socket来使用网路。 Socket就像一个假想的乙太网路介面,你可以用它把你的PC连接到互联网上的服务器上,比如Google或Github。即使是像HTTP这样的应用层协议也是建立在socket之上的。一旦给定了IP地址和端口号,就可以自由地连接到远程设备并与其进行通信。连接流程如下图所示。
get-start-6
下面是一个使用服务器socket和客户端socket互相传送消息的范例,要使用这个范例,您需要两个ameba RTL8722来运行MicroPython,在REPL 的paste模式下分别将下面的代码复制并粘贴到两个ameba。
以下是服务器代码
import socket
from wireless import WLAN
wifi = WLAN(mode = WLAN.STA)
wifi.connect(ssid = "YourWiFiSSID", pswd = "YourWiFiPassword") # change the ssid and pswd to yours
s = socket.SOCK()
port = 5000
s.bind(port)
s.listen()
conn, addr = s.accept()
while True:
    data = conn.recv(1024)
    conn.send(data+"from server")
以下是客户端代码
import socket
from wireless import WLAN
wifi = WLAN(mode = WLAN.STA)
wifi.connect(ssid = "YourWiFiSSID", pswd = "YourWiFiPassword") # change the ssid and pswd to yours
c = socket.SOCK()
# make sure to check the server IP address and update in the next line of code
c.connect("your server IP address", 5000)
c.send("hello world")
data = c.recv(1024)
print(data)
 
从HTTP网站上抓取信息:
• 准备材料: Ameba x 1
• 步骤:
socket建立好后,我们就可以轻松访问HTTP网站并抓取信息了。复制粘贴以下的代码到REPL的粘贴模式中。
import socket
from wireless import WLAN
wifi = WLAN(mode = WLAN.STA)
wifi.connect(ssid = "YourWiFiSSID", pswd = "YourPassword") # change the ssid and pswd to yours

def http_get(url):
    _, _, host, path = url.split('/', 3)
    c = socket.SOCK()
    # We are visiting MicroPython official website's test page
    c.connect(host, 80)
    c.send(bytes('GET /%s HTTP/1.0\r\nHost: %s\r\n\r\n' % (path, host), 'utf8'))
    while True:
        data = c.recv(100)
        if data:
            print(str(data,'utf8'), end='')
        else:
            break

http_get('http://micropython.org/ks/test.html')
API 文件
构造函数
socket.SOCK(domain [选填], type [选填])
创建一个SOCK对象,并根据其他所给的参数来进行配置。 SOCK类是socket类的子集,我们主要使用SOCK类来完成socket相关的通讯连接。
• domain: 地址域类型. 默认为AF_INET
 - AF_INET: IPv4,常见的IP地址,以点为分隔符,正在渐渐被IPv6取代
 - AF_INET6: IPv6,以冒号为分隔符的IP地址
• type: socket 类型, 默认为SOCK_STREAM
 - SOCK_STREAM: TCP 类型
 - SOCK_DGRAM: UDP 类型
 
方法
socket.SOCK.connect(host [必填], port [必填])
该方法连接一个远程的服务器
• host: 字串格式的服务器地址
• port: 整数格式的端口号
 
socket.SOCK.bind(port [必填])
这个方法创建一个服务器socket,并绑定到所指定的端口上
• port: port number in integer
 
socket.SOCK.listen()
这个方法将服务器socket设为listen模式,等待客户端的连接
 
socket.SOCK.accept()
这个方法接受一个客户端的连接要求,生成并返回一个新的socket对象来进行之后的通信
 
socket.SOCK.recv(length [必填])
这个方法等待并接收length长度的数据
• length: 预期接收的数据长度
 
socket.SOCK.send(buffer [必填])
这个方法将缓存器中的数据发送出去
• buffer: 一个array/bytearray/string 类型的缓存器
 
socket.SOCK.settimeout(seconds [必填])
这个方法将socket的timeout时间设为seconds秒
• seconds: timeou时间(秒)
 
socket.SOCK.close()
这个方法关闭socket
请先确认已安装QQ通讯软体