Ameba MicroPython: [RTL8722CSM] [RTL8722DM] Socket
class socket – Socket 網路編程
示例
Echo服務器與客戶端:
• 準備材料: Ameba x 2
• 步驟:
WiFi連接完成後即可使用Socket來使用網路。 Socket就像一個假想的乙太網路介面,你可以用它把你的PC連接到互聯網上的服務器上,比如Google或Github。即使是像HTTP這樣的應用層協議也是建立在socket之上的。一旦給定了IP地址和端口號,就可以自由地連接到遠程設備並與其進行通信。連接流程如下圖所示。

下面是一個使用服務器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
Realtek IoT/Wi-Fi MCU Solutions . All Rights Reserved.