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

【python】windows实现与k230使用socket通信并传输文件

k230是一款十分强大的视觉模块,本文尝试实现了k230与windows基于wifi的文件传输,效果还是不错的

socket模块是老牌的tcp通信库,可以参考下面的文章

socket通讯原理及例程(一看就懂)

一、K230(客户端)

k230想要使用socket,得先联网,而且这个网络只能是2.4ghz(以后可能会支持5

g),联网后创建客户端即可接收windows服务端的消息

import network,socket,time
from machine import Pin,Timer
import os
#WIFI连接函数
def WIFI_Connect():WIFI_LED=Pin(52, Pin.OUT) #初始化WIFI指示灯wlan = network.WLAN(network.STA_IF) #STA模式
#    wlan.active(True)                   #激活接口if not wlan.isconnected():for i in range(3): #重复连接3次#输入WIFI账号密码(仅支持2.4G信号), 连接超过5秒为超时wlan.connect('K230_test', '12345678')if wlan.isconnected(): #连接成功breakif wlan.isconnected(): #连接成功print('connect success')#LED蓝灯点亮WIFI_LED.value(1)#等待获取IP地址while wlan.ifconfig()[0] == '0.0.0.0':pass#串口打印信息print('network information:', wlan.ifconfig())return Trueelse: #连接失败#LED闪烁3次提示for i in range(3):WIFI_LED.value(1)time.sleep_ms(300)WIFI_LED.value(0)time.sleep_ms(300)wlan.active(False)return False

然后再写个简单的客户端,等服务端写完即可尝试是否能够收到文本

def receive_file(save_path):s = socket.socket()address=socket.getaddrinfo('10.42.0.210',5007) #服务器IP和端口print(address)while True:s.connect(address[0][-1])response = s.recv(1024)print("收到回复:", response)s.close()
if WIFI_Connect():receive_file('/data/output.wav')

二、windows(服务端)

socket是python的内置库,不需要pip

服务端也和客户端一样,先写个简单的,尝试是否能够通信

import socket
import timedef start_server(ip, port):server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)server_socket.bind((ip, port))server_socket.listen(1)print(f"服务器正在 {ip}:{port} 上监听...")while True:client_socket, addr = server_socket.accept()print(f"连接地址:{addr}")# data = client_socket.recv(1024)# print(f"收到数据: {data.decode()}")client_socket.send(b"Hello from Server!")client_socket.close()time.sleep(1)# 启动服务器
start_server('10.42.0.210', 5007)

然后记住,先运行服务端代码

再运行客户端代码,切记、切记、切记!!!!!!!

客户端打印信息

服务端打印信息

三、windows发送文件至k230

将刚刚客户端和服务端的代码改写一下,就完成了文件传输了

服务端代码

import socket
import timedef send_file(ip,port,file_path):server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)server_socket.bind((ip, port))# 等待客户端连接server_socket.listen(5)print("等待连接...")while True:client_socket, addr = server_socket.accept()with open(file_path, "rb") as f:# 获取文件大小file_size = len(f.read())# 返回文件开头f.seek(0)# 发送文件大小给客户端client_socket.sendall(str(file_size).encode() + b'\n')# 发送文件内容data = f.read(1024)while data:client_socket.sendall(data)data = f.read(1024)print("文件发送完成")client_socket.close()breaksend_file('10.42.0.210',5007,'output.wav')

客户端代码:

import network,socket,time
from machine import Pin,Timer
import os#WIFI连接函数
def WIFI_Connect():WIFI_LED=Pin(52, Pin.OUT) #初始化WIFI指示灯wlan = network.WLAN(network.STA_IF) #STA模式
#    wlan.active(True)                   #激活接口if not wlan.isconnected():for i in range(3): #重复连接3次#输入WIFI账号密码(仅支持2.4G信号), 连接超过5秒为超时wlan.connect('K230_test', '12345678')if wlan.isconnected(): #连接成功breakif wlan.isconnected(): #连接成功print('connect success')#LED蓝灯点亮WIFI_LED.value(1)#等待获取IP地址while wlan.ifconfig()[0] == '0.0.0.0':pass#串口打印信息print('network information:', wlan.ifconfig())return Trueelse: #连接失败#LED闪烁3次提示for i in range(3):WIFI_LED.value(1)time.sleep_ms(300)WIFI_LED.value(0)time.sleep_ms(300)wlan.active(False)return False
def receive_file(save_path):s = socket.socket()address=socket.getaddrinfo('10.42.0.210',5007) #服务器IP和端口print(address)while True:s.connect(address[0][-1])#接收文件大小信息file_size_str = ""while True:char = s.recv(1).decode()if char == '\n':breakfile_size_str += charfile_size = int(file_size_str)print(f"文件大小: {file_size} 字节")# 开始接收文件内容bytes_received = 0with open(save_path, 'wb') as f:while bytes_received < file_size:chunk = s.recv(min(1024, file_size - bytes_received))if not chunk:raise RuntimeError("套接字连接中断")f.write(chunk)bytes_received += len(chunk)print(f"已接收: {bytes_received}/{file_size} 字节")print("文件接收完成")s.close()breakif WIFI_Connect():receive_file('/data/output.wav')

客户端打印消息

connect success
network information: ('10.42.0.244', '255.255.255.0', '10.42.0.1', '10.42.0.1')
[(2, 1, 0, '', ('10.42.0.210', 5007))]
文件大小: 123238 字节
已接收: 1024/123238 字节
已接收: 2048/123238 字节
已接收: 3072/123238 字节
已接收: 4096/123238 字节
已接收: 5120/123238 字节
已接收: 6144/123238 字节
已接收: 7168/123238 字节
已接收: 8192/123238 字节
已接收: 9216/123238 字节
已接收: 10240/123238 字节
已接收: 11264/123238 字节
已接收: 12288/123238 字节
已接收: 13312/123238 字节
已接收: 14336/123238 字节
已接收: 15360/123238 字节
已接收: 16384/123238 字节
已接收: 17408/123238 字节
已接收: 18432/123238 字节
已接收: 19456/123238 字节
已接收: 20480/123238 字节
已接收: 21504/123238 字节
已接收: 22528/123238 字节
已接收: 23552/123238 字节
已接收: 24576/123238 字节
已接收: 25600/123238 字节
已接收: 26624/123238 字节
已接收: 27648/123238 字节
已接收: 28672/123238 字节
已接收: 29696/123238 字节
已接收: 30720/123238 字节
已接收: 31744/123238 字节
已接收: 32768/123238 字节
已接收: 33792/123238 字节
已接收: 34816/123238 字节
已接收: 35840/123238 字节
已接收: 36864/123238 字节
已接收: 37888/123238 字节
已接收: 38912/123238 字节
已接收: 39936/123238 字节
已接收: 40960/123238 字节
已接收: 41984/123238 字节
已接收: 43008/123238 字节
已接收: 44032/123238 字节
已接收: 45056/123238 字节
已接收: 46080/123238 字节
已接收: 47104/123238 字节
已接收: 48128/123238 字节
已接收: 49152/123238 字节
已接收: 50176/123238 字节
已接收: 51200/123238 字节
已接收: 52224/123238 字节
已接收: 53248/123238 字节
已接收: 54272/123238 字节
已接收: 55296/123238 字节
已接收: 56320/123238 字节
已接收: 57344/123238 字节
已接收: 58368/123238 字节
已接收: 59392/123238 字节
已接收: 60416/123238 字节
已接收: 61440/123238 字节
已接收: 62464/123238 字节
已接收: 63488/123238 字节
已接收: 64512/123238 字节
已接收: 65536/123238 字节
已接收: 66560/123238 字节
已接收: 67584/123238 字节
已接收: 68608/123238 字节
已接收: 69632/123238 字节
已接收: 70656/123238 字节
已接收: 71680/123238 字节
已接收: 72704/123238 字节
已接收: 73728/123238 字节
已接收: 74752/123238 字节
已接收: 75776/123238 字节
已接收: 76800/123238 字节
已接收: 77824/123238 字节
已接收: 78848/123238 字节
已接收: 79872/123238 字节
已接收: 80896/123238 字节
已接收: 81920/123238 字节
已接收: 82944/123238 字节
已接收: 83968/123238 字节
已接收: 84992/123238 字节
已接收: 86016/123238 字节
已接收: 87040/123238 字节
已接收: 88064/123238 字节
已接收: 89088/123238 字节
已接收: 90112/123238 字节
已接收: 91136/123238 字节
已接收: 92160/123238 字节
已接收: 93184/123238 字节
已接收: 94208/123238 字节
已接收: 95232/123238 字节
已接收: 96256/123238 字节
已接收: 97280/123238 字节
已接收: 98304/123238 字节
已接收: 99328/123238 字节
已接收: 100352/123238 字节
已接收: 101376/123238 字节
已接收: 102400/123238 字节
已接收: 103424/123238 字节
已接收: 104448/123238 字节
已接收: 105472/123238 字节
已接收: 106496/123238 字节
已接收: 107520/123238 字节
已接收: 108544/123238 字节
已接收: 109568/123238 字节
已接收: 110592/123238 字节
已接收: 111616/123238 字节
已接收: 112640/123238 字节
已接收: 113664/123238 字节
已接收: 114688/123238 字节
已接收: 115712/123238 字节
已接收: 116736/123238 字节
已接收: 117760/123238 字节
已接收: 118784/123238 字节
已接收: 119808/123238 字节
已接收: 120832/123238 字节
已接收: 121856/123238 字节
已接收: 122880/123238 字节
已接收: 123238/123238 字节
文件接收完成

并且成功在k230的data目录下找到output.wav文件

http://www.xdnf.cn/news/6402.html

相关文章:

  • 第二十四天打卡
  • AVLTree的模拟实现
  • 内存分配器ptmalloc2、tcmalloc、jemalloc,结构设计、内存分配过程详解
  • Cesium.Ray 知识详解,示例代码
  • 实验六:按键模拟控制实现
  • Java—— 可变参数、集合工具类、集合嵌套、不可变集合
  • 十个免费试用的云数据库
  • Awesome WM自定义菜单实现nas共享目录挂载
  • K8S Ingress 实现AB测试、蓝绿发布、金丝雀(灰度)发布
  • 基于大模型预测的全面惊厥性癫痫持续状态技术方案大纲
  • 力扣-98.验证二叉搜索树
  • C# winform 日志 NLog
  • 【vue】脚手架
  • 瀑布模型VS敏捷模型VS喷泉模型
  • 【Linux】多路转接epoll、Linux高并发I/O多路复用
  • SpringAI
  • 印度尼西亚数据源对接技术指南
  • YOLOv11融合[CVPR2025]OverLock中的模块
  • 合并有重叠的时间区间的极简方法
  • 【证书与信任机制​】​​SSL证书类型全解析:DV、OV、EV的区别与应用场景
  • 【C#基础】集合.Any() 与 判断集合的长度有啥区别?
  • atoi函数,sprintf函数,memcmp函数,strchar函数的具体原型,功能,返回值;以及使用方法
  • 现代计算机图形学Games101入门笔记(六)
  • 19、云端工业物联网生态组件 - 工厂能效与预测维护 - /数据与物联网组件/cloud-iiot-factory-analysis
  • 紫外波段太阳光模拟器介绍
  • Python Matplotlib 库【绘图基础库】全面解析
  • 在UI 原型设计中,交互规则有哪些核心要素?
  • 数据统计分析及可视化
  • 开源 Web Shell 工具
  • 万文c++继承