Отправка Zip папки через Python сокетов - PullRequest
0 голосов
/ 15 апреля 2020

Так что по какой-то причине этот код не работает должным образом для отправки папки zip с клиента на сервер. на стороне сервера, если я использую "f = zipfile.ZipFile (" platformIO.zip ")", я получаю ошибку "ValueError: stat: встроенный нулевой символ в пути", и если я использую "f = open (" platformIO.zip "," wb ")" ошибка не выдана, но полученный файл поврежден и не открывается.

Я прочитал все похожие на вопросы к этому и не могу найти решение.

Клиент:

import socket
import time


# Configure wireless connection with server (board on leg)
HOST = "192.168.4.1" # change to server ip address
PORT = 5005 # must be same as server

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
print("connected")

user_input = "startup"

while True:
    if user_input == "startup":
        # ask if user wants to send code
        user_input = input("Do you want to send new code?: (y/n)")
        if user_input == "y":
            user_input = "send code"        
        elif user_input == "n":
            user_input = input("Would you like to collect data?: (y/n)")
            if user_input == "y":
                user_input = "receive data"
            else:
                user_input = "startup"
        else:
            user_input == "startup" 
    elif user_input == "send code":
        st = "sending code"
        s.send(st.encode())
        file = "platformIO.zip"
        try:
            with open(file, "rb") as f:
                print("sending file...")
                data = f.read()
                s.sendall(data)
            print("finished sending")
            st = "finished"         
            s.send(st.encode())
            user_input = "startup"      
        except:
            print("Failed transfering <platformIO.zip>, make sure it exists")
            st = "failed"           
            s.send(st.encode())
    elif input =="receive data":
        print("feature not yet implemented")
        user_input == "startup"
    # delay
    time.sleep(0.1)

Сервер:

import socket
import time
import zipfile
import os

# create server
HOST = "192.168.4.1"
PORT = 5005
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print("socket created")

# managing error exception
try:
    s.bind((HOST,PORT))
except socket.error:
    print("bind Failed")

s.listen(1)
print("Socket awaiting mesesages")
(conn, addr) = s.accept()
print("connected")

# awaiting message
msg = "startup"

while True:
    if msg == "startup":
        # receive data from controller
        msg = conn.recv(4096)
        print(str(msg, 'utf-8'))
    elif str(msg, 'utf-8') == "sending code":
        f = zipfile.ZipFile("platformIO.zip", "w")
        #f = open("platformIO.zip", "wb")   
        while True:         
            data = conn.recv(4096)
            print(data)         
            if not data:
                break
            f.write(data)
        print("file received")  
        msg = "startup"
    time.sleep(.1)

conn.close()

edit : если я использую f = open ("platformIO.zip", "wb") и добавляю s.close () внутри записи, пока l oop сервера, я могу получить zip успешно, но затем соединение закрывается и Я не могу открыть zip-файл, пока не закрою программу

    f = open("platformIO.zip", "wb")    
    while True:         
        data = conn.recv(4096)
        print(data)         
        if not data:
            break
        f.write(data)
        s.close()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...