服务器端

import socket
import threading
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 获取本机名
hostname = socket.gethostname()
# 获取本机ip
ip = socket.gethostbyname(hostname)
server.bind(('192.168.43.52', 8000))

server.listen(5)
print('服务器启动成功')


def receive_file(c_id):
    try:
        # 文件传输
        with open("receve.png", "wb") as file:
            while True:
                # 接收数据
                file_data = c_id.recv(1024)
                # 数据长度不为0写入文件
                if file_data:
                    file.write(file_data)
                # 数据长度为0表示下载完成
                else:
                    print('传输完成')
                    break
    # 下载出现异常时捕获异常
    except Exception as e:
        print("下载异常", e)
    # 无异常则下载成功
    else:
        print("下载成功")


def run(c_id):
    com = input('please input')
    # 这里必须输入1 客户端才开始传输文件
    c_id.send(com.encode('utf-8'))
    threading.Thread(target=receive_file, args=(client_id,)).start()

while True:
    client_id, client_address = server.accept()
    # print()
    print(client_address, '连接成功')
    threading.Thread(target=run, args=(client_id,)).start()

客户端

# coding=utf-8
from picamera import PiCamera, Color
from time import sleep
import socket
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
def send_file(file_path):
    try:
        # 数据传输
        with open(file_path, "rb") as file:
            while True:
                # 读取文件数据
                file_data = file.read(1024)
                # 数据长度不为0表示还有数据
                if file_data:
                    client.send(file_data)
                # 数据为0表示传输完成
                else:
                    print("传输成功")
                    break
    except Exception as e:
        print("传输异常:", e)
ip = '192.168.43.52'
# 连接服务器
a=client.connect((ip, 8000))
print('connect successful')
file_path='/home/pi/Desktop/Photo.png'
while True:
    recv_com = client.recv(1024).decode('utf-8')
    print(recv_com)
    if recv_com=='1':
        send_file(file_path)
        # 这里需要设置传输完成后手动关闭本连接,要不然服务器会一直等待。
        client.close()
        break
client.close()    
print('Done')

注意事项

遇到的最大一点错误就是,传输完成后没有关闭连接,所以导致程序一直在运行没有结束传输。
虽然客户端使用了两个线程,但是应该直接使用函数来存储文件就欧克了