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

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

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

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

一、K230(客户端)

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

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

python 复制代码
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(): #连接成功
                break

    if 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 True

    else: #连接失败

        #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

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

python 复制代码
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

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

python 复制代码
import socket
import time

def 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

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

服务端代码

python 复制代码
import socket
import time


def 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()
        break



send_file('10.42.0.210',5007,'output.wav')

客户端代码:

python 复制代码
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(): #连接成功
                break

    if 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 True

    else: #连接失败

        #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':

                break
            file_size_str += char
        file_size = int(file_size_str)
        print(f"文件大小: {file_size} 字节")

        # 开始接收文件内容
        bytes_received = 0
        with 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()
        break


if WIFI_Connect():
    receive_file('/data/output.wav')

客户端打印消息

python 复制代码
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文件

相关推荐
czhc11400756632 分钟前
Linux 76 rsync
linux·运维·python
悠悠小茉莉32 分钟前
Win11 安装 Visual Studio(保姆教程 - 更新至2025.07)
c++·ide·vscode·python·visualstudio·visual studio
m0_625686551 小时前
day53
python
Real_man1 小时前
告别 requirements.txt,拥抱 pyproject.toml和uv的现代Python工作流
python
站大爷IP2 小时前
Python文件操作的"保险箱":with语句深度实战指南
python
运器1232 小时前
【一起来学AI大模型】算法核心:数组/哈希表/树/排序/动态规划(LeetCode精练)
开发语言·人工智能·python·算法·ai·散列表·ai编程
工业互联网专业4 小时前
汇编与接口技术:8259中断实验
汇编·单片机·嵌入式硬件·8259中断实验
brave and determined4 小时前
国产MCU学习Day6——CW32F030C8T6: I2C功能详解与应用案例
单片机·eeprom·i2c·cw32f030c8t6·cw32·cw32f030·中断读取eeprom
巴里巴气4 小时前
selenium基础知识 和 模拟登录selenium版本
爬虫·python·selenium·爬虫模拟登录
19894 小时前
【零基础学AI】第26讲:循环神经网络(RNN)与LSTM - 文本生成
人工智能·python·rnn·神经网络·机器学习·tensorflow·lstm