1Danke
ERLEDIGT
JA
JA
ANTWORTEN
11
11
ZUGRIFFE
1390
1390
EMPFEHLEN
-
12.10.08 10:25 #1
Hallo liebe Community,
ich habe ein Problem, bei der mir 2 Stunden mit google auch nicht weiterhelfen.
Ich schreibe zurzeit ein kleines tool für einen Clan, welches erlaubt einen Gameserver zu steuern. Da müssen dann natürlich auch die aktuellen Serverdaten abgefragt werden.
Das habe ich folgendermaßen gelöst:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13
senden := #$FF#$FF#$FF#$FF+'getstatus'+#$00; IdUDPClient1.Host := Label6.Caption; IdUDPClient1.Active := true; IdUDPClient1.BufferSize := 118192; IdUDPClient1.Send(senden); IdUDPClient1.ReceiveBuffer( Buffer, 118192); j := 0; for i := 0 to length(Buffer) do begin str1 := Char(Buffer[i]); strTemp := strTemp + str1; end; IdUDPClient1.Active := false; Daten := strTemp;
Die Daten werden dann natürlich noch dem entsprechend gefiltert. Das ganze steckt in einem Timer und aktualisiert sich jede Sekunde.
Nun was ist aber wenn der Server einmal abgestürzt ist. Dann bekomme ich diesen Socket-Fehler #10054 und das Programm beendet sich.
Kann man denn diesen Fehler nicht irgendwie abfangen und dann in ein Label einfach nur reinschreiben, dass der Server DOWN ist?
Danke schonmal im Voraus
BeneACHTUNG: Großer großer großer Anfänger am Arbeiten......
-
13.10.08 08:22 #2
- Registriert seit
- Mar 2004
- Beiträge
- 441
Mit einem try..except sollte der Fehler abzufangen und zu interpretieren sein.
-
13.10.08 20:11 #3
Hallo,
ich glaube das habe ich schon versucht. Ist das so korrekt?
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
try senden := #$FF#$FF#$FF#$FF+'getstatus'+#$00; IdUDPClient1.Host := Label6.Caption; IdUDPClient1.Active := true; except Timer1.Enabled := False; end; IdUDPClient1.BufferSize := 118192; IdUDPClient1.Send(senden); IdUDPClient1.ReceiveBuffer( Buffer, 118192); j := 0; for i := 0 to length(Buffer) do begin str1 := Char(Buffer[i]); strTemp := strTemp + str1; end; IdUDPClient1.Active := false; Daten := strTemp;
ACHTUNG: Großer großer großer Anfänger am Arbeiten......
-
14.10.08 07:59 #4
- Registriert seit
- Mar 2004
- Beiträge
- 441
Ich persönlich würde noch die restlichen Anweisungen mit dem IdUDPClient1 mit in den try aufnehmen. Und den except habe ich in meinen Programmen ein bißchen detaillierter, z.B.
Code delphi:1 2 3 4 5 6
... except on EConvertError do begin ...(mach was) end;
Ich weiß jetzt natürlich nicht, was für einen Socketfehler du bekommst, aber so ähnlich könntest du den dann abfangen und entsprechend drauf reagieren, also z.B. den Timer deaktivieren und einen MessageDialog ausgeben.
Wenn du nicht genau weisst, was für eine Exception geworfen wird, dann kannst du ja auch ganz unspezifiziert ein
benutzen.Code delphi:1 2 3 4 5 6 7 8
... except on e: Exception do begin Timer1.Enabled := false; CreateMessageDialog(e.Message, mtWarning, [mbOk]); end; end;
-
14.10.08 22:19 #5
Hallo,
alles klar genau so habe ich das jetzt eingesetzt, nur wird die exception nicht ausgeführt.
Es erscheint immer noch folgendes:
Code :1
Eine Exception der Klasse EIdSocketError aufgetreten. Meldung: 'Socket-Fehler # 10054
Mein Code aktuell:
Code :1 2 3 4 5 6 7 8
try senden := #$FF#$FF#$FF#$FF+'getstatus'+#$00; IdUDPClient1.Host := Label6.Caption; IdUDPClient1.Active := true; except on e: Exception do begin Timer1.Enabled := false; CreateMessageDialog(e.Message, mtWarning, [mbOk]); end; end;
Was ist da noch falsch?Geändert von real_benedikt (14.10.08 um 22:23 Uhr)
ACHTUNG: Großer großer großer Anfänger am Arbeiten......
-
15.10.08 08:51 #6
- Registriert seit
- Mar 2004
- Beiträge
- 441
Versuche es mal mit
Code delphi:1 2 3 4 5 6 7 8 9 10 11
try senden := #$FF#$FF#$FF#$FF+'getstatus'+#$00; IdUDPClient1.Host := Label6.Caption; IdUDPClient1.Active := true; except on e: EIdSocketError do begin Timer1.Enabled := false; IdUDPClient1.Active := false; CreateMessageDialog('Eigene Fehlermeldung: ' + e.Message, mtWarning, [mbOk]); end; end;
Und lasse das Ganze dann auch mal komplett durchlaufen. Wenn dir also beim Testen die Exception geworfen wird, dann lass das Programm einfach weiter ausführen und schau, ob der except-Teil auch aufgerufen wird. Der Single Step-Debugger macht das Exceptionhandling beim Testen nicht unbedingt einfacher.
-
15.10.08 20:19 #7
Hallo,
okey habe ich gemacht, musste noch IdException in die Uses einfügen.
Der except teil wird auch nachdem weiterlaufen lassen nicht ausgeführt
Geändert von real_benedikt (15.10.08 um 21:06 Uhr)
ACHTUNG: Großer großer großer Anfänger am Arbeiten......
-
16.10.08 07:54 #8
- Registriert seit
- Mar 2004
- Beiträge
- 441
-
16.10.08 17:25 #9
Hallo,
ich habe da was gefunden:
http://www.informatik-treff.de/mater...entsocket.html
Ganz unten steht was von : property OnError
Nur da ich Anfänger bin weiss ich nicht wie ich das einsetzten soll
ACHTUNG: Großer großer großer Anfänger am Arbeiten......
-
16.10.08 18:10 #10
- Registriert seit
- Mar 2004
- Beiträge
- 441
So, jetzt aber...
Ich habe mir mal ordentlich Zeit genommen (geht auf Arbeit leider nicht) und mir jetzt mal alles angeschaut, was du so gepostet hat. Ich hatte bisher noch nie was mit Client-/Socketprogrammierung unter Delphi zu tun, deswegen musste ich erstmal schauen, was da überhaupt alles für Komponenten mit rein spielen. Der von dir gepostete Link hilft leider nicht weiter, da er sich auf eine TClientSocket-Komponente bezieht, du aber, wenn ich das richtig verstehe, eine Indy UDP Client-Komponente verwendest (ausgehend von dem Namen deiner Komponente). Zu dieser habe ich via Google das hier gefunden:
http://conferences.codegear.com/article/32159
Ich habe den Artikel jetzt nicht vollständig gelesen, sondern mir erstmal nur die wichtigten Passagen rausgepickt. Suchbegriff "OnError" in der Seite liefert Folgendes:
Das Ganze steht unter der Überschrift "Handling Exceptions" und da wird wunderschön beschrieben, wie mit Fehlern der Indy-Komponenten umzugehen ist.There are no OnError events, so do not go looking for them.
Im Prinzip läuft es auf ein Exception-Handling hinaus, wie ich es schon vor hatte (also mit try..catch..finally und dem ganzen Krempel). Wie das jetzt speziell mit der von dir verwendeten Komponente funktioniert ist da (fast haarklein) beschrieben inklusive Beispielcode.
Ich denke, daß dich dieser Artikel deinem Ziel sehr viel näher bringen wird.
-
16.10.08 18:27 #11
Ahh,
ja genauuu daas ist es vielen vielen vielen vielen Dank
Habe es genau so gemacht und es geht
Grüße
BeneACHTUNG: Großer großer großer Anfänger am Arbeiten......
-
16.10.08 19:21 #12
- Registriert seit
- Mar 2004
- Beiträge
- 441
Ähnliche Themen
-
Socket-Fehler
Von PhilippGer im Forum Java GrundlagenAntworten: 6Letzter Beitrag: 13.07.09, 15:42 -
Formulare - Fehler abfangen
Von FactorX im Forum PHPAntworten: 1Letzter Beitrag: 13.03.06, 19:53 -
Fehler abfangen
Von Stgt im Forum VisualStudio & MFCAntworten: 1Letzter Beitrag: 21.01.05, 16:51 -
ftp Fehler abfangen
Von mot im Forum C/C++Antworten: 4Letzter Beitrag: 09.11.04, 17:36 -
fehler abfangen
Von Horusab im Forum PHPAntworten: 4Letzter Beitrag: 02.09.03, 20:55





Zitieren
Login





