You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Socket从Python代码向树莓派(Rpi)写入文件?

实现Python客户端向树莓派Socket服务端写入文件内容

你的问题出在对Socket连接对象的误解:conn是Socket连接实例,没有open方法,无法直接操作客户端的文件。正确的逻辑是客户端读取本地文件内容,通过Socket发送给树莓派服务端,服务端接收数据后写入本地文件。

以下是完整实现方案:

树莓派(服务端)代码

服务端负责监听连接、接收客户端发送的文件内容,并写入指定路径的文件:

import socket

TCP_IP = '0.0.0.0'  # 监听所有网卡
TCP_PORT = 12345
BUFFER_SIZE = 1024  # 每次接收的字节数
FILE_PATH = '/home/pi/received_file.txt'  # 树莓派上的目标文件路径

# 创建Socket并启动监听
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((TCP_IP, TCP_PORT))
s.listen(1)

print(f"等待客户端连接,监听端口 {TCP_PORT}...")
conn, addr = s.accept()
print(f"已连接客户端: {addr}")

# 打开文件准备写入
with open(FILE_PATH, 'wb') as f:
    while True:
        # 循环接收数据
        data = conn.recv(BUFFER_SIZE)
        if not data:  # 客户端关闭连接时,recv返回空
            break
        f.write(data)

print("文件接收并写入完成")
conn.close()
s.close()

Python客户端代码

客户端负责读取本地文件,通过Socket发送给服务端:

import socket

TCP_IP = '树莓派的IP地址'  # 替换为树莓派实际IP,比如192.168.1.100
TCP_PORT = 12345
BUFFER_SIZE = 1024
LOCAL_FILE_PATH = 'local_file.txt'  # 要发送的本地文件路径

# 连接服务端
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((TCP_IP, TCP_PORT))

# 读取本地文件并发送
with open(LOCAL_FILE_PATH, 'rb') as f:
    while True:
        data = f.read(BUFFER_SIZE)
        if not data:
            break
        s.sendall(data)

print("文件发送完成")
s.close()

关键注意事项

  • 路径与权限:树莓派服务端的FILE_PATH要确保有写入权限,优先选择用户目录下的路径,避免写入系统目录。
  • 大文件处理:代码采用分块读写的方式,适合大文件传输,不会一次性占用过多内存。
  • 异常处理:实际使用中可添加try-except块,处理网络中断、文件读写失败等异常情况。
  • 结束标记:如果需要明确标识文件传输结束,可在客户端发送完文件后发送约定的结束符(如s.send(b'EOF')),服务端接收时判断到该结束符后停止写入。

内容的提问来源于stack exchange,提问作者vmon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 14:35:56