吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3496|回复: 34
收起左侧

[Python 原创] Python通过串口收发文件

  [复制链接]
xiaomingtt 发表于 2023-4-24 10:13
单位内外网是隔离的,USB对拷线被禁用,安全优盘使用太费事,就想到了通过串口传输文件.
[Python] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
import serial
from xmodem import XMODEM
import os
 
def Send_File(filepath, port='COM8', baudrate=115200):
    bn = os.path.basename(filepath)
    filesize = os.stat(filepath).st_size
    strSendFileCMD = "AFF_" + str(filesize) + "_" + bn + "\n"
    # 打开串口
    ser = serial.Serial(port, baudrate)
     
    # 定义YMODEM发送函数
    def send_ymodem(filename):
        def getc(size, timeout=1):
            return ser.read(size)
        def putc(data, timeout=1):
            return ser.write(data)
        modem = XMODEM(getc, putc)
        with open(filename, "rb") as f:
            status = modem.send(f)
        return status
     
    # 发送指令
    ser.write(strSendFileCMD.encode())
    # 发送文件
    status = send_ymodem(filepath)
    if status:
        print(f"文件发送成功:{filepath}")
    else:
        print(f"文件发送失败:{filepath}")
    # 关闭串口
    ser.close()
 
 
def Recv_File(port='COM2', baudrate=115200):
    # 打开串口
    ser = serial.Serial(port, baudrate)
     
    # 定义YMODEM接收函数
    def recv_ymodem(filename):
        def getc(size, timeout=1):
            return ser.read(size) or None
        def putc(data, timeout=1):
            return ser.write(data)
        modem = XMODEM(getc, putc)
        with open(filename, "wb") as f:
            status = modem.recv(f)
        return status
     
    # 循环监听指令
    while True:
        # 接收指令
        print("等待接收指令")
        strCMD = ser.read_until().strip().decode()
        print(strCMD)
        cmdlist = strCMD.split("_")
        cmd = cmdlist[0]
        filesize = cmdlist[1]
        filename = cmdlist[2]
        if cmd == "AFF":
            # 收到指令后开始接收文件
            print("开始接收文件")
            # 接收文件并保存
            status = recv_ymodem(filename)
            if status:
                print(f"文件接收成功:{filename}")
            else:
                print(f"文件接收失败:{filename}")
            # 继续监听指令
            continue
        # 其他指令
        print(f"收到指令:{cmd}")
    # 关闭串口
    ser.close()
 
if __name__=="__main__":
    Send_File("D:/users.7z") #发送文件
    #Recv_File() #接收文件

上面是简单的文件传输代码.
我目前内外网传输最多的就是截图,内网通过串口给外网发送指令,外网根据指令截图,然后自动传回内网,不用切换电脑,不用插拔优盘,确实方便.

免费评分

参与人数 5吾爱币 +9 热心值 +5 收起 理由
wushaominkk + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
lgh978 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
kuangxiao + 1 + 1 谢谢@Thanks!
blindcat + 1 + 1 谢谢@Thanks!
zcchk135820 + 1 我很赞同!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| xiaomingtt 发表于 2023-4-24 15:26
狐白本白 发表于 2023-4-24 15:09
没理解怎么用 需要内外网同事执行吗 两台电脑需要在同一网段下吗
使用的话我需要改东那些地方 麻烦楼主告 ...

跟网络没有关系,数据传输走的是串口.具体使用方法:内网网电脑都安装Python,最好同一版本,不同版本不知行不行.外网电脑运行pip install xmodem安全文件传输库.,然后运行pip freeze>C:\pip.txt和pip download -d C:\offline -r C:\pip.txt两个命令,将生成的C:\pip.txt文件和C:\offline文件夹复制到内网C盘.内网电脑运行pip install --no-index --find-links=C:\offline -r C:\pip.txt安装相关库.将两台电脑的串口通过交叉线连接.或者找两根杜邦线将两个串口的引脚2和引脚3交叉连接.确定两台电脑的串口号.需要发送文件电脑代码最后一行改为Send_File("D:/users.7z","COM1"),第一个参数是待发送文件,第二个参数是串口号,需要接收文件的电脑最后一行改为Recv_File('COM1').现在接收端运行代码,然后在发送端运行代码,不出意外的话就可以了.
shaunkelly 发表于 2023-4-24 10:22
Gxiaojia 发表于 2023-4-24 10:32
串口发送文件 ,,,   get新思路了 确实很多地方 USB禁止了
KSPprince 发表于 2023-4-24 11:01
接收端用什么设备,两台电脑直连吗
w759003376 发表于 2023-4-24 12:48
KSPprince 发表于 2023-4-24 11:01
接收端用什么设备,两台电脑直连吗

看代码,收和接都在里面,分开用就行
玟篠 发表于 2023-4-24 13:15
学习一下,刚好学了python
wyjtpp 发表于 2023-4-24 13:50
还能有这样的操作,老铁666啊
KSPprince 发表于 2023-4-24 14:12
w759003376 发表于 2023-4-24 12:48
看代码,收和接都在里面,分开用就行

厉害厉害
Foticing 发表于 2023-4-24 15:04
115200的波特率,传输速度只有14KB/S
狐白本白 发表于 2023-4-24 15:09
本帖最后由 狐白本白 于 2023-4-24 15:11 编辑

没理解怎么用 需要内外网同事执行吗 两台电脑需要在同一网段下吗
使用的话我需要改东那些地方 麻烦楼主告知
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-5-24 12:31

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表