Python файловый сервер и клиент websocket - PullRequest
0 голосов
/ 05 марта 2020

я пытаюсь навсегда запустить серверный скрипт на сервере и позволить клиенту присоединиться и отправить папку с изображениями, которую я сейчас тестирую с одним клиентом, который работает, но со многими проблемами, скажем, он закрывает соединение, если все операции передачи выполняются, он должен оставаться подключенным новые изображения будут добавляться в папку клиента, которые нужно переносить снова и снова, поэтому сервер и клиент должны работать вечно. Может ли кто-нибудь исправить код.

сервер

import socket
import sys
import threading
import time
from queue import Queue
import os.path

save_path = './rcv'

serversock = socket.socket()
host = '0.0.0.0'
port = 81

print(host)
serversock.bind((host,port))
filename = ""
serversock.listen(10)
print("Waiting for a connection.....")

clientsocket,addr = serversock.accept()
print("Got a connection from %s" % str(addr))
while True:
    size = clientsocket.recv(16) # Note that you limit your filename length to 255 bytes.
    if not size:
        break
    size = int(size, 2)
    filename = clientsocket.recv(size)
    filesize = clientsocket.recv(32)
    filesize = int(filesize, 2)
    path = os.path.join(save_path.encode(), filename)
    file_to_write = open(path, 'wb')
    chunksize = 4096
    while filesize > 0:
        if filesize < chunksize:
            chunksize = filesize
        data = clientsocket.recv(chunksize)
        file_to_write.write(data)
        filesize -= len(data)

    file_to_write.close()
    print('File received successfully')

клиент

import socket
import os
import threading
import time

s = socket.socket()
#host = socket.gethostname()
host = '0.0.0.0'#dest ip
port = 81

path = "./data"
directory = os.listdir(path)
s.connect((host, port))


while True:
    if not os.listdir(path):
        print("Directory is empty")
        time.sleep(3)

    else:
                #s.connect((host, port))
                for files in directory:
                    print(files)
                    filename = files
                    size = len(filename)
                    size = bin(size)[2:].zfill(16) # encode filename size as 16 bit binary
                    s.send(size.encode())
                    s.send(filename.encode())

                    filename = os.path.join(path,filename)
                    filesize = os.path.getsize(filename)
                    filesize = bin(filesize)[2:].zfill(32) # encode filesize as 32 bit binary
                    s.send(filesize.encode())

                    file_to_send = open(filename, 'rb')

                    l = file_to_send.read()
                    s.send(l)
                    file_to_send.close()

                    print ('File Sent')
                    if os.path.exists(filename):
                        os.remove(filename)
                        time.sleep(1) # without sleep its not transfering more then 30 images

                    else:
                        print("The file does not exist")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...