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'))
В момент принятия данных сокетом поднимается исключение. Подозреваю,что проблема в коде, а не в софте на хосте.