Wie testet man ob ein Server exestiert ?

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Treehouse
User
Beiträge: 39
Registriert: Freitag 14. Dezember 2007, 00:40

Hallo,

ich will mich per socket mit einem Server verbinden. Vorher will ich aber testen ob dieser überhaupt online ist. Wenn nicht soll halt das Programm ein Disconnect ausgeben.

Wie kann man sowas machen in Python?
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Einfach probieren eine Verbindung aufzubauen und dann die mögliche Exception abfangen. Ansonsten einfach anpingen.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Treehouse hat geschrieben:ich will mich per socket mit einem Server verbinden. Vorher will ich aber testen ob dieser überhaupt online ist. Wenn nicht soll halt das Programm ein Disconnect ausgeben.
Wenn du dich zu verbinden versuchst und der Host nicht existiert (oder genauer: auf dem Host kein solcher Port offen ist zu dem du dich verbinden willst), dann gibt es eben eine Exception. Das ist der sicherste und auch sauberste Weg.

EyDu: Anpingen ist nicht genau, es kann auch einfach sein, dass ICMP Ping blockiert wird. Dann ist der Host online, aber ein Ping schlägt fehl.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Treehouse
User
Beiträge: 39
Registriert: Freitag 14. Dezember 2007, 00:40

Ok vielen dank für eure hilfe. Dann werde ich das so machen. Schade ist nur das der user dann soviel Fehler Output auf der Konsole bekommt. Ich hätte es lieber gesehen wenn einfach nur das "Disconnect" da stehen würde.
Aber gut wenns so muss ist es halt so.

Edit: Hat sich erledigt vielen dank nochmal.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Treehouse hat geschrieben:Ok vielen dank für eure hilfe. Dann werde ich das so machen. Schade ist nur das der user dann soviel Fehler Output auf der Konsole bekommt. Ich hätte es lieber gesehen wenn einfach nur das "Disconnect" da stehen würde.
Aber gut wenns so muss ist es halt so.
Der User sieht doch gar nichts, wenn du die Exception richtig abfängst.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
lunar

Leonidas hat geschrieben:
Treehouse hat geschrieben:Ok vielen dank für eure hilfe. Dann werde ich das so machen. Schade ist nur das der user dann soviel Fehler Output auf der Konsole bekommt. Ich hätte es lieber gesehen wenn einfach nur das "Disconnect" da stehen würde.
Aber gut wenns so muss ist es halt so.
Der User sieht doch gar nichts, wenn du die Exception richtig abfängst.
Ob man von richtigem Abfangen sprechen kann, wenn der Nutzer gar nichts sieht, sei mal dahin gestellt... ich mag es schon, wenn Firefox mir sagt, wenn das Netzwerk nicht stimmt ;)

Fazit: Etwas sollte der Nutzer schon sehen, und zwar am besten die Exception-Message. Den Traceback sollte man aber im Idealfall mitloggen, um das Debugging zu erleichtern.
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Und wenn der Server nicht erreichbar ist, kann es keinen Disconnect geben, weil es vorher keinen Connect gab ... :idea:
Benutzeravatar
roschi
User
Beiträge: 225
Registriert: Samstag 29. März 2008, 18:58
Wohnort: Thueringen, Deutschland
Kontaktdaten:

hallo,

am besten du machst das mit einer try/except-anweisung:

Code: Alles auswählen

import socket

ip = "127.0.0.1"
port = 9009

x = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

try:
  x.connect((ip, port))
except socket.error:
  print "Fehlgeschlagen"
wenn der host jetzt nicht erreichbar ist, dann wird dem user gesagt, dass es fehlgeschlagen ist.

mfg
roschi
Antworten