【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文件

相关推荐
叶子丶苏1 分钟前
第十七节_PySide6基本窗口控件深度补充_窗口绘图类(QPicture类) 下篇
python·pyqt
c骑着乌龟追兔子12 分钟前
Day 42 复习日
python
Robot侠14 分钟前
视觉语言导航从入门到精通(二)
开发语言·人工智能·python·llm·vln
无限大.20 分钟前
为什么玩游戏需要独立显卡?——GPU与CPU的分工协作
python·玩游戏
deephub21 分钟前
llama.cpp Server 引入路由模式:多模型热切换与进程隔离机制详解
人工智能·python·深度学习·llama
简单点好不好26 分钟前
2025--简单点--python之状态模式
开发语言·python·状态模式
1+2单片机电子设计27 分钟前
基于 STM32 的网络授权时钟系统设计与实现
开发语言·stm32·单片机·嵌入式硬件·php·51单片机
棒棒的皮皮38 分钟前
【OpenCV】Python图像处理之仿射变换
图像处理·python·opencv·计算机视觉
weixin_446260851 小时前
FastF1: 轻松获取和分析F1数据的Python包
开发语言·python
我送炭你添花1 小时前
Pelco KBD300A 模拟器:06.用 PyQt5 实现 1:1 像素级完美复刻 Pelco KBD300A 键盘
python·qt·自动化·运维开发