Программа постоянно получает данные со стороны отправителя. И у меня есть отмеченная/неотмеченная кнопка, когда я делаю ее отмеченной, она запускает часть if
... это хорошо. Теперь я делаю это непроверенным, затем часть else
запускается и печатает Unchecked going to close socket
, но s.shutdown(10)
и s.close()
не закрывает сокет, это показывает ошибку s.shutdown(10) не является объектом сокета ОС [Errno 10022] указан недопустимый аргумент< /strong> Почему он не закрывает сокет или есть ли другой способ закрыть его.
Дополнительное требование
если мой сокет снова закроется, я хочу, чтобы он был проверен (второй раз), чтобы снова запустить часть if
, чтобы получить данные с компьютера-отправителя, можно ли снова запустить сокет, не закрывая мою программу.
def show_markers(self):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = socket.gethostbyname('192.168.225.12')
s.connect((host, port))
scale=0
while True:
if self.iconAction.isChecked():
print ('Checked')
m = QgsVertexMarker(self.iface.mapCanvas())
data = s.recv(SIZE)
data1 = s.recv(SIZE)
c = data.decode()
d = data1.decode()
x = float(c)
y = float(d)
print("printing X :", x)
print("printing Y :", y)
rect = QgsRectangle(float(x)-scale, float(y)-scale, float(x)+scale, float(y)+scale)
me = self.iface.mapCanvas()
me.setExtent(rect)
me.refresh()
m.setCenter(QgsPointXY(x, y))
m.setColor(QColor(255, 0, 0))
m.setIconSize(7)
m.setIconType(QgsVertexMarker.ICON_X) # or ICON_CROSS, ICON_X
m.setPenWidth(3)
else:
print('Unchecked going to close socket')
s.shutdown(10)
s.close()
Я предполагаю, что это должно работать так:
1-й раз нажмите кнопку ---> Проверено, и если часть работает [работает]
2-й раз нажмите кнопку ---> Непроверенный и еще часть запуска, чтобы закрыть сокет [не закрывается]
3-й раз нажмите кнопку ---› снова. Проверено и получено данные с компьютера-отправителя [возможно ли это]