Socket Зависает recv

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

Кто знает в чём проблема?

клиент

import os
import socket
from time import sleep
import ast


class socker:

    def __init__(self):
        self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.sock.connect(('localhost', 4545))

    def send_request(self, request):
        # self.sock.settimeout(5)
        self.sock.send(request)

    def recieve_request(self):
        byte = b""
        while True:
            data = self.sock.recv(1024)
            byte += data

            if not data:
                break

        return byte

    def close_connection(self):
        self.sock.close()
     
def test():
   
    s = socker()
    s.send_request(str({"request": "get_files_list"}).encode())

    s.recieve_request()



test()

Сервер

import socket
import ast
import os



def start_server():
    server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server.bind(('localhost', 4545))
    print("Сервер включён!")

    while True:
        try:
            server.listen(10)
            conn, addr = server.accept()
            print('Подключён:', addr)
            byte = b""
            while True:
                data = conn.recv(1024)
                byte += data
                if not data:
                    break

            data = ast.literal_eval(byte.decode())
            request = data["request"]

            print("Запрос: ", request)

            if request == "get_info_about_file":
                pass
            elif request == "get_files_list":
                files = os.walk(saved_dir)
                dirpaths = []
                file_names = []
                for dirpath, dirnames, filenames in files:
                    dirpaths.append(dirpath)
                    print(dirpath)
                    for file in filenames:
                        file_names.append(os.path.join(dirpath, file))

                conn.send(str({"dirs": dirpaths, "files": file_names}).encode())

            conn.shutdown(socket.SHUT_RDWR)

        except KeyboardInterrupt:
            server.close()
        except Exception as err:
            print(err)


if __name__ == "__main__":
    start_server()

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