当前位置: 首页 > news >正文

【学习K230-例程18】GT6700-HTTP-Server

B站视频


HTTP协议

  GT6700 开发板配备了以太网接口,通过直插网线连通网络,使用HTTP协议Ping百度。
  HTTP 的基本工作原理是客户端(通常是 web 浏览器)向服务器发送请求,服务器接收到请求后,返回相应的资源。这些资源可以是网页、图像、音频文件、视频等。
  HTTP 使用了客户端-服务器模型,其中客户端发送请求,服务器返回响应。
在这里插入图片描述

代码展示

from machine import Pin                 #导入Pin模块
import time, os, socket, network        #导入time, os, socket, network模块CONTENT = b"""\
HTTP/1.0 200 OKHello #%d from GINGKO k230 canmv MicroPython!
"""
def network_connect(connect=True):LAN_LED=Pin(53, Pin.OUT)            #初始化联网指示灯if connect:LAN_LED.value(1)                #LED灯点亮else:for i in range(3):LAN_LED.value(1)time.sleep_ms(300)LAN_LED.value(0)time.sleep_ms(300)
# 执行以太网连接函数
def network_use_lan(is_lan=True):if is_lan:lan = network.LAN()if lan.active():if lan.isconnected():       #连接成功print('network information:', lan.ifconfig())#串口打印信息lan.ifconfig("dhcp")    #设置DHCP模式print(lan.config("mac"))#查看网口mac地址print(lan.ifconfig())   #查看网口 ip,掩码,网关,dns配置network_connect(True)   #连接成功,点亮LEDip = lan.ifconfig()[0]else:ip = '0.0.0.0'network_connect(False)  #连接失败,LED闪烁三次else:network_connect(False)      #连接失败,LED闪烁三次ip = '0.0.0.0'raise RuntimeError("LAN 未激活")else:print("WIFI 请等待更新")ip = '0.0.0.0'network_connect(False)          #连接失败,LED闪烁三次return ipdef http_server_main(micropython_optimize=True):ip = network_use_lan(True)s = socket.socket()ai = socket.getaddrinfo("0.0.0.0", 8081)addr = ai[0][-1]s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)s.bind(addr)s.listen(5)print("Listening, connect your browser to http://%s:8081/" % (ip))counter = 0while True:res = s.accept()client_sock = res[0]client_addr = res[1]print("Client address:", client_addr)client_sock.setblocking(True)client_stream = client_sock if micropython_optimize else client_sock.makefile("rwb")while True:h = client_stream.read()if h is None:continueprint(h)if h.endswith(b'\r\n\r\n'):breakos.exitpoint()client_stream.write(CONTENT % counter)client_stream.close()counter += 1time.sleep(2)if counter > 0:print("http server exit!")s.close()breakdef main():ip=network_use_lan(True)        #有线以太网连接函数if not ip=='0.0.0.0':http_server_main()main()

代码解读

导入必要的模块

 import socket  # 模块用于网络通信  import network  # 管理网络接口(如 LAN)  import time # 提供时间相关功能  

定义响应内容

  定义一个字节字符串 CONTENT,作为 HTTP 响应主体。 %d 是计数器占位符,表示每次请求的序号。

 CONTENT = b"""\ HTTP/1.0 200 OK Hello #%d from GINGKO k230 canmv MicroPython! """  

配置网络接口
  这段代码依据 is_wlan 参数选择 WLAN 或 LAN 接口。WLAN 模式下连接到指定 Wi-Fi 网络,而 LAN 模式则通过 DHCP 获取 IP 地址。获取并打印网络配置后,返回 IP。

# 执行以太网连接函数  
def network_use_lan(is_lan=True):  if is_lan:  lan = network.LAN()  if lan.active():  if lan.isconnected(): # 连接成功  # 串口打印信息  print('network information:', lan.ifconfig())  lan.ifconfig("dhcp")# 设置DHCP模式  print(lan.config("mac"))# 查看网口mac地址  print(lan.ifconfig())# 查看网口 ip,掩码,网关,dns配置  network_connect(True)# 连接成功,点亮LED  ip = lan.ifconfig()[0]  else:  ip = '0.0.0.0'  # LED闪烁3次提示  network_connect(False)# 连接失败,LED闪烁三次  else:  network_connect(False)# 连接失败,LED闪烁三次  ip = '0.0.0.0'  raise RuntimeError("LAN 未激活")  else:  print("WIFI 请等待更新")  ip = '0.0.0.0'  network_connect(False)# 连接失败,LED闪烁三次  return ip  

创建并配置 socket
  代码创建 socket,并启用 SO_REUSEADDR 选项以允许端口重用。绑定地址并开始监听端口 8081,最多支持 5 个连接请求。

 s = socket.socket()  # 创建 socket 对象  s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) # 设置socket选项,允许地址重用ai = socket.getaddrinfo("0.0.0.0", 8081) # 绑定到所有网络接口,监听 8081 端口    addr = ai[0][-1]    s.bind(addr)    s.listen(5) # 开始监听,最大连接数为 5 print("监听中,请在浏览器中访问 http://%s:8081/" % (network.LAN().ifconfig()[0]))  

处理客户端请求
  服务器主循环接受客户端连接,选择不同的读取方式处理请求,发送带有计数器的响应,并关闭连接。连接关闭后,等待 2 秒进入下次循环。

 counter = 0    while True:    res = s.accept()# 接受连接     client_sock = res[0]    client_addr = res[1]    print("客户端地址:", client_addr)    if not micropython_optimize: # 根据是否启用优化,选择不同的读取方式   client_stream = client_sock.makefile("rwb")# 使用流式接口(适用于 CPython)else:client_stream = client_sock # 使用 MicroPython 特有接口# 读取请求内容    client_stream.write(CONTENT % counter) # 发送响应 client_stream.close() # 关闭连接 counter += 1time.sleep(2)if counter > 0:print("HTTP 服务器退出!")    s.close()break

效果展示

  配置好后,我们通过Win+R输入cmd。在命令符里输入ipconfig,查看我们PC与K230连接的网线IP。
在这里插入图片描述
我们将K230的IP配置到与PC同一子网下,方便我们网路访问。
在这里插入图片描述
最后我们将PC端的防火墙关闭,开启防火墙可能会传输信息失败。
在这里插入图片描述
准备好上述工作后,我们插上网线,再启动K230。等待启动过程中以太网模块初始化,初始化完毕后,我们运行代码,可以看到网页地址打印出来了。
在这里插入图片描述
我们将地址复制进电脑浏览器,通过电脑访问,就可以在打印信息里看到PC的访问IP和端口号。
在这里插入图片描述

【学习k230 - 例程18】网络例程HTTP-server


文章转载自:

http://zgYYqeYm.yrcxg.cn
http://nygXCtBu.yrcxg.cn
http://DVZPT7sV.yrcxg.cn
http://3EKXGxIG.yrcxg.cn
http://Ch8kEPsq.yrcxg.cn
http://LNj09orP.yrcxg.cn
http://4u3XqeJo.yrcxg.cn
http://yMOzV1BX.yrcxg.cn
http://2ueMMckr.yrcxg.cn
http://KV1QEc9C.yrcxg.cn
http://RdD5O6MW.yrcxg.cn
http://J5kJL5tZ.yrcxg.cn
http://uLO4snOO.yrcxg.cn
http://fcyKxAHV.yrcxg.cn
http://5GqLRFVf.yrcxg.cn
http://wOKcya1u.yrcxg.cn
http://Dplk2e7a.yrcxg.cn
http://47APV9Lf.yrcxg.cn
http://lYnmlIUS.yrcxg.cn
http://xmKfbfRE.yrcxg.cn
http://PPzkwc6w.yrcxg.cn
http://KclSFiwG.yrcxg.cn
http://PdPpjL1U.yrcxg.cn
http://fev47Mwr.yrcxg.cn
http://wPUKa4Q9.yrcxg.cn
http://JUATmBvD.yrcxg.cn
http://Zn7RVPXl.yrcxg.cn
http://JDD9Zplv.yrcxg.cn
http://PVRCGSE4.yrcxg.cn
http://gxrokB0t.yrcxg.cn
http://www.dtcms.com/a/380248.html

相关文章:

  • Redis列表(List):实现队列/栈的利器,底层原理与实战
  • 超级流水线和标量流水线的原理
  • 漫谈《数字图像处理》之边缘检测与边界预处理的辨析
  • (二)文件管理-文件查看-less命令的使用
  • 深入理解节流(Throttle):原理、实现与应用场景
  • 汽车电子电气架构中的电源架构(下)
  • GISBox与GeoServer使用体验全对比:轻量化工具如何重新定义GIS价值?
  • 02.【Linux系统编程】Linux权限(root超级用户和普通用户、创建普通用户、sudo短暂提权、权限概念、权限修改、粘滞位)
  • JavaEE 初阶第二十二期:网络原理,底层框架的“通关密码”(二)
  • Netty 实战应用:从 RPC 到即时通讯,再到 WebSocket
  • 南京方言数据集|300小时高质量自然对话音频|专业录音棚采集|方言语音识别模型训练|情感计算研究|方言保护文化遗产数字化|语音情感识别|方言对话系统开发
  • Django全栈班v1.04 Python基础语法 20250912 下午
  • uniapp多端打包样式处理
  • Unity学习----【进阶】TextMeshPro学习(一)--基础知识点
  • Echarts雷达图根据数值确定颜色
  • etcd备份脚本
  • 基于 OpenCV 与 SIFT 算法的指纹识别系统实现:从匹配到可视化
  • uniapp微信小程序保存海报到手机相册canvas
  • 3227. 字符串元音游戏
  • 【python实用小脚本-215】[硬件互联] 按钮×Python梦幻联动|用20行代码实现“一键录音”自动化改造实录(建议收藏)
  • 分布式专题——10.2 ShardingSphere-JDBC分库分表实战与讲解
  • 机器学习-数据标注
  • Leetcode:动态规划算法
  • 鸿蒙项目篇-22-项目功能结构说明-写子页面和导航页面
  • 深入解析 Kubernetes 中的 Service 资源:为应用提供稳定的网络访问
  • JAiRouter 0.8.0 发布:Docker 全自动化交付 + 多架构镜像,一键上线不是梦
  • 自如入局二手房,对居住服务行业的一次范式重构
  • BLE6.0信道探测,如何重构物联网设备的距离感知逻辑?
  • 【OC】单例模式
  • 【数据结构】LRU Cache