Передача и прием длинного списка клиент-сервер

Есть очень длинный список. Как гарантированно его отправить на сервер и получить обратно? Нарезку данных уже попробовал) У клиента при переменной var = 8000 обратно список возвращается не целиком...

Код сервера:

import socketserver

class ThredingTCPServer(socketserver.ThreadingMixIn, socketserver.TCPServer):
    pass

class EchoTCPHandler(socketserver.BaseRequestHandler):

    def handle(self):
        def recvall(request):
            BUFF_SIZE = 4096  # 4 KiB
            data = b''
            while True:
                part = request.recv(BUFF_SIZE)
                data += part
                if len(part) < BUFF_SIZE:
                    break
            return data

        full_data = recvall(self.request)
        print(f'Adress: {self.client_address[0]}')
        print(f'Data: {len(full_data)} {full_data}')
        # некая операция
        #d = eval(full_data)
        #d = d[::-1]

        msg = str(full_data).encode()
        self.request.sendall(msg)

if __name__ == '__main__':
    with ThredingTCPServer(('', 8888), EchoTCPHandler) as server:
        server.serve_forever()

код клиента:

import socket


def recvall(sock):
    BUFF_SIZE = 4096 # 4 KiB
    data = b''
    while True:
        part = sock.recv(BUFF_SIZE)
        data += part
        if len(part) < BUFF_SIZE:
            break
    return data


var = 8000
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('127.0.0.1', 8888))
msg = str([i*i for i in range(var)]).encode()
sock.send(msg)
res = recvall(sock)
ans = res.decode()
print(len(ans), ans)
sock.close()

Ответы (2 шт):

Автор решения: Konstantin

В данном случае мне помогло уменьшение BUFF_SIZE до 256. При таком значении передаваемый список (если как строка) увеличился с 65495 до 1050000, что намного лучше, по сравнению с первоначальным вариантом.

→ Ссылка
Автор решения: eri

Ваша проблема в

if len(part) < BUFF_SIZE:
   break

Замените на

if not part:
   break
→ Ссылка