![]() |
TClient & TServer socket verbindung
Hi@all,
Komponenten: TClient & TServer Socket Problemfall: Ein Online-Spiel das die Verbindung zum Server aufbauen soll, wenn das Programm gestartet wird. Wenn aber der Server nicht zu errichen ist, dann gibt er einen Asynchron Fehler aus und der Client versucht nicht mehr zu verbinden. Frage: ist es möglich den Clienten so lange verbinden zu lassen, bis das Programm geschlossen wird oder die Verbindung zum Server steht? Mfg Tobias |
Re: TClient & TServer socket verbindung
Delphi-Quellcode:
Bedenke aber, dass das nicht unbedingt die beste lösung ist, so wie du das machen willst!
repeat
try tcpclient1.Connect; except inc(TriesToConnect); end; until tcpclient1.Connected; |
Re: TClient & TServer socket verbindung
Zitat:
MfG Freak |
Re: TClient & TServer socket verbindung
ARG, sehe jetzt erst, dass er sich auch mittendrin beenden sollen kann, sorry. Natürlich, Threads+Abbruchbedingung :wall:
|
Re: TClient & TServer socket verbindung
Er gibt mir Leider immernoch einen Asynchron Fehler aus...
So sieht mein code zum connecten aus:
Delphi-Quellcode:
Was mache ich falsch?
procedure TForm1.FormCreate(Sender: TObject);
begin Client.Address:='127.0.0.1'; Client.Port:=4100; repeat Application.ProcessMessages; try client.Active:=true; except inc(TriesToConnect); end; until client.Socket.Connected=true; end; |
Re: TClient & TServer socket verbindung
Hast du das programm mal über die *.exe gestartet und nicht über F9?
|
Re: TClient & TServer socket verbindung
Prüfe mal, ob auf dem Port überhaupt was läuft, bei einem Connect auf localhost ist ein Fehler in der Verbindung eher unwahrscheinlich.
Sowas
Delphi-Quellcode:
macht man nicht. :)
until client.Socket.Connected=true;
Besser:
Delphi-Quellcode:
until ((client.Socket.Connected) or (TriesToConnect >= MAX_TRIES));
|
Re: TClient & TServer socket verbindung
Hab das Programm über die exe gestartet und den code von ste_ett eingebaut.
Wenn der Server läuft, geht alles Wunderbar! Wenn der Server ausgeschaltet ist, hängt sich das Programm auf, es kommt keine Form und nach einiger Zeit eine Asynchron Fehler meldung... |
Re: TClient & TServer socket verbindung
Zitat:
Wenn keine Anwendung antwortet, wird ewig versucht, eine Verbindung aufzunehmen und das Programm bleibt in der Schleife hängen. Wenn du das z.B. im FormCreate machst, siehst du keine Form, da das Programm diese noch nicht erstellt hat. Wie hoch hast du MAX_TRIES gesetzt? Du solltest auch in den Schleifendurchlauf ein "Sleep();" und ein "Application.ProcessMessages" einbauen. |
Re: TClient & TServer socket verbindung
Warum Sleep?
|
Re: TClient & TServer socket verbindung
Habe max_tries auf 10 gesetzt!
Habe jetzt alles in einen Timer gesetzt, der jede 5 sek. versucht die Verbindung herzustellen. Jetzt müssten ich nur noch die blöde Asynchron Fehlermeldung unterdrücken können, dann wäre das Problem gelöst.
Delphi-Quellcode:
procedure TForm1.TimerTimer(Sender: TObject);
begin IF Client.Socket.Connected=false THEN begin try client.Active:=true; except inc(TriesToConnect); end; end; end; |
Re: TClient & TServer socket verbindung
Zitat:
Gaaaaaanz schlechte Idee. :D Fehler beseitigen, nicht unterdrücken! :) Welchen Fehler-Code bekommst du genau? |
Re: TClient & TServer socket verbindung
Asynchroner Socket-Fehler 10061.
//edit: Kann man das vielleicht mit dem onError Ereignis abfangen? |
Re: TClient & TServer socket verbindung
10061 bedeutet, dass auf der Gegenseite kein Port offen ist, um eine Socket-Verbindung aufzubauen.
Was ist das für ein Server, auf den du connectest? |
Re: TClient & TServer socket verbindung
Der läuft auf dem selben rechner (darum 127.0.0.01)
Hab es hinbekommen die Fehlermeldung nicht anzeigen zu lassen!
Delphi-Quellcode:
procedure TForm1.ClientError(Sender: TObject; Socket: TCustomWinSocket;
ErrorEvent: TErrorEvent; var ErrorCode: Integer); begin ErrorCode:=0; end; Problem ist jetzt gelöst! Vielen dank an alle die geholfen haben! :cheers: :kiss: :zwinker: Mfg Tobias |
Re: TClient & TServer socket verbindung
o_O
Bitte schreib wenigstens den Fehler vorher in eine Log. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:22 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz