Всем привет, столкнулся с такой проблемой. Суть задачи такая: я по TCP подключаюсь к контроллеру, контроллер проводит тесты своих систем и кидает мне результаты этих тестов. Я эти данные принимаю через сокет, обрабатываю и вывожу на экран проги. Соответственно после окончания тестов я закрываю сокет и поток приёма данных вырубается. В проге есть кнопка перезапустить тестирование, она нужна, чтобы при замене контроллера не перезапускать программу. При нажатии на эту кнопку я перезапускаю поток приёма данных и, соответственно, пытаюсь подключиться к уже закрытому сокету и вижу такую ошибку
[WinError 10056] Сделан запрос на подключение для уже подключенного сокета
или
[WinError 10038] Сделана попытка выполнить операцию на объекте, не являющемся сокетом
так вот вопрос, как быть?
код:
Файл tcp_receive.py В нём как раз таки и находится сокет
import socket
from PyQt5.QtCore import QObject, pyqtSignal
class TCP_Receiver(QObject):
connect_signal = pyqtSignal(bool)
error_signal = pyqtSignal(str)
def __init__(self):
super().__init__()
self.client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.stop_flag = False
def kill(self):
try:
self.stop_flag = True
self.client_socket.close()
except Exception as e:
print(f"Произошла ошибка при закрытии сокета: {e}")
finally:
print("Сокет успешно закрыт")
def Connect_to_controller(self, data_queue):
host = '10.55.6.170'
port = 23
try:
print("Успешно подключено")
self.client_socket.connect((host, port))
print("Успешно подключено")
self.connect_signal.emit(True)
while not self.stop_flag:
response = self.client_socket.recv(1440)
data_to_send = "Ваши данные для контроллера"
self.send_data_to_controller(data_to_send)
print(response)
data_queue.put(response)
if self.stop_flag == True:
break
except Exception as e:
# error_message = "Тестирование успешно завершено!"
# self.error_signal.emit(error_message)
print(e)
finally:
print("Поток подключения к контроллеру завершен")
def send_data_to_controller(self, data):
try:
self.client_socket.send(data.encode("utf-8")) # Здесь data - это строка данных для отправки
print("Данные успешно отправлены")
except Exception as e:
print(f"Произошла ошибка при отправке данных: {e}")
Если нужно будет, то могу докинуть код остальных файлов, просто хабр не даёт отправить больше 10к символов
ОСТОРОЖНО ВОЗМОЖЕН ГОВНОКОД!