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

相关推荐
昊昊昊昊昊明4 分钟前
十天学会嵌入式技术之51单片机—day-10
单片机·嵌入式硬件·51单片机
Code_流苏18 分钟前
《Python星球日记》 第71天:命名实体识别(NER)与关系抽取
python·深度学习·ner·预训练语言模型·关系抽取·统计机器学习·标注方式
点云SLAM19 分钟前
Python中列表(list)知识详解(2)和注意事项以及应用示例
开发语言·人工智能·python·python学习·数据结果·list数据结果
国强_dev19 分钟前
任意复杂度的 JSON 数据转换为多个结构化的 Pandas DataFrame 表格
开发语言·python
伊织code43 分钟前
PyTorch API 7 - TorchScript、hub、矩阵、打包、profile
人工智能·pytorch·python·ai·矩阵·api
开开心心就好1 小时前
高效全能PDF工具,支持OCR识别
java·前端·python·pdf·ocr·maven·jetty
赵谨言1 小时前
基于单片机的车灯智能控制系统设计与实现
经验分享·单片机·毕业设计
剑鞘的流苏1 小时前
STM32-USART串口通信(9)
stm32·单片机·嵌入式硬件
程序员三藏2 小时前
软件测试之功能测试详解
自动化测试·软件测试·python·功能测试·测试工具·职场和发展·测试用例
辰%2 小时前
如何重启pycharm中的项目?
windows·python·pycharm