Python: сокет не может получить данные

Есть два сокета: клиентский и серверный. На стороне сокета-сервера создаётся дочерний процесс, который обрабатывает команды в shell. Клиент же должен отправлять эти команды. Поток вывода прицепляется к пайпу, читается, а потом отправляется обратно клиенту.

С первым запросом всё хорошо, а во второй раз код крошится, вызывая исключение:

Traceback (most recent call last):
  File "D:\python\client.py", line 7, in <module>
    data = sock.recv(1024)
ConnectionAbortedError: [WinError 10053] An established connection was aborted by the software in your host machine

Серверная часть:

import socketserver
import subprocess

class EchoTCPHandler(socketserver.BaseRequestHandler):
    def handle(self):
        res = self.request.recv(1024)
        print('Connected to {}'.format(self.client_address[0]))
        proc = subprocess.Popen(res.decode('utf-8'), shell=True, text=True, stdout=subprocess.PIPE)
        recieve = proc.stdout.read()
        self.request.send(recieve.encode())

if __name__ == '__main__':
    server = socketserver.TCPServer(('127.0.0.1', 7000), EchoTCPHandler)
    server.serve_forever()

Клиентская часть:

import socket
sock = socket.socket()
sock.connect(('127.0.0.1', 7000))
while True:
    command = input('$shell ')
    sock.send(command.encode())
    data = sock.recv(10024)
    print(data.decode('utf-8'))

В момент принятия данных сокетом поднимается исключение. Подозреваю,что проблема в коде, а не в софте на хосте.


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