ConnectionResetError
Verfasst: Montag 16. August 2021, 15:54
Hi Zusammen,
ich würde mal eure Hilfe brauchen. Aktuell versuche ich auf einem Server, ein kleines Python Tool zu schreiben, was ständig auf ankommende Anfragen meiner Client(s) wartet und dann angibt, ob ein bestimmtest Programm läuft (return True, else False). Das klappt aktuell nur einmal, danach kommt der Fehler: ConnectionResetError: [WinError 10054] An existing connection was forcibly closed by the remote host
Nun möchte ich es eigentlich so haben, dass ein Client zu jeder Zeit eine Verbindung aufbauen kann und den Status abfragen kann. Ich habe bereits die s.close() Anweisungen aus den Quellcodes genommen, die aktuell so ausschen:
Serverseite:
Clientseite:
Wie gesagt, wenn ich die App erst auf dem Server starte, danach auf dem Client, dann gehts. Mein Wunsch wäre aber, dass der Server 24/7 läuft und die Clients sich zu jeder Zeit den Status dort abholen dürfen. Könntet ihr mir sagen, was ich ändern müsste, damit das so hinhaut? Bin noch nicht sooo versiert mit der socket library.
Vielen Dank schonmal
ich würde mal eure Hilfe brauchen. Aktuell versuche ich auf einem Server, ein kleines Python Tool zu schreiben, was ständig auf ankommende Anfragen meiner Client(s) wartet und dann angibt, ob ein bestimmtest Programm läuft (return True, else False). Das klappt aktuell nur einmal, danach kommt der Fehler: ConnectionResetError: [WinError 10054] An existing connection was forcibly closed by the remote host
Nun möchte ich es eigentlich so haben, dass ein Client zu jeder Zeit eine Verbindung aufbauen kann und den Status abfragen kann. Ich habe bereits die s.close() Anweisungen aus den Quellcodes genommen, die aktuell so ausschen:
Serverseite:
Code: Alles auswählen
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(("", 50000))
s.listen(1)
while True:
komm, addr = s.accept()
while True:
data = komm.recv(1024)
if not data:
print("no data")
komm.close()
break
print("[{}] {}".format(addr[0], data.decode()))
# Check, if GAM is running. Return boolTrue / False
status = "mainframe.exe" in (p.name() for p in psutil.process_iter())
komm.send(str(status).encode())
Code: Alles auswählen
def init_socket(self):
""" Only create one instance and return error, if no connection possible"""
if self.create_instance_socket == True:
try:
self.s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.s.connect(('ip_des_servers', 50000))
self.create_instance_socket = False
except ConnectionRefusedError:
self.create_instance_socket = True
@pyqtSlot()
def run(self):
while True:
try:
self.init_socket()
nachricht = "test von mir"
self.s.send(nachricht.encode())
status_recieved = self.s.recv(1024)
print(status_recieved)
print("[{}] {}".format('ip_des_servers', status_recieved.decode()))
except OSError as o:
self.status.emit("No connection to target machine")
Vielen Dank schonmal