Skip to content

Commit 100db34

Browse files
committed
Add example of socket and http.
1 parent eb7f243 commit 100db34

12 files changed

+447
-0
lines changed
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import request
2+
3+
# http 协议的(非 https)百度URL
4+
url = 'http://www.baidu.com'
5+
6+
# 发送 HTTP GET 请求
7+
response = request.get(url)
8+
9+
# 创建文件baidu.html
10+
f = open('/usr/baidu.html', 'wb') # 'wb' 表示写入二进制数据
11+
12+
# 获取网页文件内容,并写入文件
13+
for i in response.content:
14+
f.write(i)
15+
16+
# 网页数据拉取完毕,关闭文件
17+
f.close()
18+
19+
# 打开文件baidu.html
20+
with open('/usr/baidu.html', 'rb') as f: # 'rb' 以二进制方式读取文件
21+
r = f.read()
22+
while r:
23+
print(r)
24+
r = f.read()
25+
26+
# 关闭文件
27+
f.close()
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import request
2+
3+
# 天气查询URL
4+
url = 'http://restapi.amap.com/v3/weather/weatherInfo?key=2875b8171f67f3be3140c6779f12dcba&city=北京&extensions=base'
5+
6+
# 发送 HTTP GET 请求
7+
response = request.get(url)
8+
9+
# 获取天气查询网站返回的原始数据
10+
data = ''
11+
for i in response.text:
12+
data += i
13+
print('raw data responsed from website:')
14+
print(data)
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import request
2+
3+
# 天气查询URL
4+
url = 'http://restapi.amap.com/v3/weather/weatherInfo?key=2875b8171f67f3be3140c6779f12dcba&city=北京&extensions=base'
5+
6+
# 发送 HTTP GET 请求
7+
response = request.get(url)
8+
9+
# 获取天气查询网站返回的原始数据,并解析为dict
10+
data = response.json()
11+
data = data['lives'][0]
12+
for k,v in data.items():
13+
print('%s: %s' % (k, v))
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import request
2+
3+
url = 'http://www.example.com'
4+
boundary = '----WebKitFormBoundaryrGKCBY7qhFd3TrwA'
5+
headers = {'Content-Type': 'multipart/form-data; boundary=' + boundary}
6+
7+
data = ''
8+
data += '--' + boundary + '\r\n'
9+
data += 'Content-Disposition: form-data; name="text"\r\n'
10+
data += '\r\n'
11+
data += 'title\r\n'
12+
data += '--' + boundary + '\r\n'
13+
data += 'Content-Disposition: form-data; name="file"; filename="test.png"\r\n'
14+
data += 'Content-Type: image/png\r\n'
15+
data += '\r\n'
16+
17+
data = bytes(data.encode())
18+
19+
with open('/usr/test.png', 'rb') as f:
20+
data += f.read()
21+
22+
data += b'\r\n'
23+
data += b'--' + bytes(boundary.encode()) + b'--'
24+
25+
request.post(url, data=data)
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import ethernet
2+
3+
# 创建以太网卡
4+
eth = ethernet.W5500(b'\x12\x34\x56\x78\x9a\xbc','','','',-1,38,36,37, 0)
5+
print('W5500 ethernet nic created.')
6+
7+
# 开启 DHCP 功能
8+
eth.dhcp()
9+
print('DHCP enabled.')
10+
11+
# 网卡注册成功后,查看网络配置信息
12+
ip_conf = eth.ipconfig()
13+
print('get ip_conf:', ip_conf)
14+
15+
# 将以太网卡设置为默认网卡
16+
eth.set_default_NIC(ip_conf[1][1])
17+
print('W5500 is set as default nic.')
18+
19+
# 启动网卡
20+
eth.set_up()
21+
print('Ethernet nic enabled.')
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
from usr.WLAN import ESP8266
2+
from machine import UART
3+
4+
# 创建Wi-Fi网卡
5+
wifi = ESP8266(UART.UART2, ESP8266.STA)
6+
print('Wi-Fi nic created.')
7+
8+
# 配置连接的SSID和password,并连接路由器
9+
ssid = 'ssid'
10+
password = 'password'
11+
wifi.station(ssid,password)
12+
print('Wi-Fi connected:%s, %s.' % (ssid, password))
13+
14+
# 给Wi-Fi网卡配置DNS服务器地址
15+
wifi.set_dns('8.8.8.8', '114.114.114.114')
16+
print('Wi-Fi DNS server configured.')
17+
18+
# 查看网络配置信息
19+
ip_conf = wifi.ipconfig()
20+
print('get ip_conf:', ip_conf)
21+
22+
# 将Wi-Fi网卡设置为默认网卡
23+
wifi.set_default_NIC(ip_conf[0])
24+
print('Wi-Fi is set as default nic.')
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import ethernet
2+
import usocket
3+
4+
# 创建以太网卡
5+
eth = ethernet.W5500(b'\x12\x34\x56\x78\x9a\xbc','','','',-1,38,36,37, 0)
6+
print('W5500 ethernet nic created.')
7+
8+
# 开启 DHCP 功能
9+
eth.dhcp()
10+
print('DHCP enabled.')
11+
12+
# 启动网卡
13+
eth.set_up()
14+
print('Ethernet nic enabled.')
15+
16+
# 网卡注册成功后,查看网络配置信息
17+
ip_conf = eth.ipconfig()
18+
print('get ip_conf:', ip_conf)
19+
20+
def tcp_client(address, port):
21+
# 创建socket对象
22+
sock = usocket.socket(usocket.AF_INET, usocket.SOCK_STREAM, usocket.IPPROTO_TCP)
23+
print('socket object created.')
24+
25+
# 创建完成socket对象以后,并且连接服务器之前 绑定以太网卡IP地址
26+
local_address = ip_conf[1][1]
27+
sock.bind((local_address, 0))
28+
print('bind ethernet address: %s', local_address)
29+
30+
# 域名解析
31+
sockaddr=usocket.getaddrinfo(address, port)[0][-1]
32+
print('DNS for %s: %s' % (address, sockaddr[0]))
33+
34+
# 连接tcp服务器
35+
sock.connect(sockaddr)
36+
print('tcp link established.')
37+
38+
# 更多代码请参考前面关于 TCP 客户端的代码示例
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
from usr.WLAN import ESP8266
2+
from machine import UART
3+
import usocket
4+
5+
# 创建Wi-Fi网卡
6+
wifi = ESP8266(UART.UART2, ESP8266.STA)
7+
print('Wi-Fi nic created.')
8+
9+
# 配置连接的SSID和password,并连接路由器
10+
ssid = 'ssid'
11+
password = 'password'
12+
wifi.station(ssid,password)
13+
print('Wi-Fi connected:%s, %s.' % (ssid, password))
14+
15+
# 给Wi-Fi网卡配置DNS服务器地址
16+
wifi.set_dns('8.8.8.8', '114.114.114.114')
17+
print('Wi-Fi DNS server configured.')
18+
19+
# 查看网络配置信息
20+
ip_conf = wifi.ipconfig()
21+
print('get ip_conf:', ip_conf)
22+
23+
def tcp_client(address, port):
24+
# 创建socket对象
25+
sock = usocket.socket(usocket.AF_INET, usocket.SOCK_STREAM, usocket.IPPROTO_TCP)
26+
print('socket object created.')
27+
28+
# 创建完成socket对象以后,并且连接服务器之前 绑定Wi-Fi网卡IP地址
29+
local_address = ip_conf[0]
30+
sock.bind((local_address, 0))
31+
print('bind ethernet address: %s', local_address)
32+
33+
# 域名解析
34+
sockaddr=usocket.getaddrinfo(address, port)[0][-1]
35+
print('DNS for %s: %s' % (address, sockaddr[0]))
36+
37+
# 连接tcp服务器
38+
sock.connect(sockaddr)
39+
print('tcp link established.')
40+
41+
# 更多代码请参考前面关于 TCP 客户端的代码示例
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
import usocket
2+
import checkNet
3+
4+
def tcp_client(address, port):
5+
# 创建socket对象
6+
sock = usocket.socket(usocket.AF_INET, usocket.SOCK_STREAM, usocket.IPPROTO_TCP)
7+
print('socket object created.')
8+
9+
# 域名解析
10+
sockaddr=usocket.getaddrinfo(address, port)[0][-1]
11+
print('DNS for %s: %s' % (address, sockaddr[0]))
12+
13+
# 连接tcp服务器
14+
sock.connect(sockaddr)
15+
print('tcp link established.')
16+
17+
# 打包用户数据
18+
data = 'GET / HTTP/1.1\r\n'
19+
data += 'Host: ' + address + ':' + str(port) + '\r\n'
20+
data += 'Connection: close\r\n'
21+
data += '\r\n'
22+
data = data.encode()
23+
24+
# 发送数据
25+
sock.send(data)
26+
print('<-- send data:')
27+
print(data)
28+
29+
#接收数据
30+
print('--> recv data:')
31+
while True:
32+
try:
33+
data = sock.recv(1024)
34+
print(data)
35+
except:
36+
# 数据接收完毕,连接断开
37+
print('tcp disconnected.')
38+
sock.close()
39+
break
40+
41+
if __name__ == '__main__':
42+
stage, state = checkNet.waitNetworkReady(30)
43+
if stage == 3 and state == 1: # 网络状态正常
44+
print('Network connection successful.')
45+
tcp_client('www.baidu.com', 80) # 启动客户端功能
46+
else:
47+
print('Network connection failed, stage={}, state={}'.format(stage, state))
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import usocket
2+
import checkNet
3+
4+
def tcp_client(address, port):
5+
# 创建socket对象
6+
sock = usocket.socket(usocket.AF_INET, usocket.SOCK_STREAM, usocket.IPPROTO_TCP)
7+
print('socket object created.')
8+
9+
# 连接tcp服务器
10+
sock.connect((address, port))
11+
print('tcp link established: %s, %s' % (address, port))
12+
13+
# 打包用户数据
14+
data = 'GET / HTTP/1.1\r\n'
15+
data += 'Host: ' + address + ':' + str(port) + '\r\n'
16+
data += 'Connection: close\r\n'
17+
data += '\r\n'
18+
data = data.encode()
19+
20+
# 发送数据
21+
sock.send(data)
22+
print('<-- send data:')
23+
print(data)
24+
25+
#接收数据
26+
print('--> recv data:')
27+
while True:
28+
try:
29+
data = sock.recv(1024)
30+
print(data)
31+
except:
32+
# 数据接收完毕,连接断开
33+
print('tcp disconnected.')
34+
sock.close()
35+
break
36+
37+
if __name__ == '__main__':
38+
stage, state = checkNet.waitNetworkReady(30)
39+
if stage == 3 and state == 1: # 网络状态正常
40+
print('Network connection successful.')
41+
tcp_client('36.152.44.95', 80) # 启动客户端功能
42+
else:
43+
print('Network connection failed, stage={}, state={}'.format(stage, state))

0 commit comments

Comments
 (0)