Autor Beitrag
pantarhei
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Mo 17.03.08 17:07 
Hallo,

ich habe das Problem dass ich es nicht schaffe einen ClientSocket unter Delphi 5 automaisch wiederzuverbinden, wenn die Verbindung vom Server beendet wurde.

Ich kann per ClientSocket.Open die Verbindung wiederherstellen wenn ich Open über einen Button aufrufe.

Also Button klicken, Funktion Open aufrufen, Ausfürhung wieder zurück an Main -> Verbindung wird aufgebaut. Dann erst werden die Ereignisse von ClientSocket ausgelöst und Active auf true gesetzt.

Sobald ich versuche Open aufzurufen, und die Verbindung in der gleichen Funktion zu benutzen funktioniert nichts. Ich muss wirklich hingehen, über einen sep. Button nur die Verbindung herstellen um diese dann nutzen zu können.

Das sieht mir doch schwer nach einem Bug aus. Oder habe ich da jetzt ein Verständnissproblem bei dem Ganzen?
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mo 17.03.08 17:54 
Moin und :welcome: im Forum!

user profile iconpantarhei hat folgendes geschrieben:
ich habe das Problem dass ich es nicht schaffe einen ClientSocket unter Delphi 5 automaisch wiederzuverbinden, wenn die Verbindung vom Server beendet wurde.
Grundsätzlich sollte das wohl möglich sein. ;)

user profile iconpantarhei hat folgendes geschrieben:
Sobald ich versuche Open aufzurufen, und die Verbindung in der gleichen Funktion zu benutzen funktioniert nichts.
Das ist auch korrekt so, du bist erst dann wieder mit dem Server verbunden, wenn das Ereignis OnConnect eintritt - was aber eben erst nach Ende des aktuellen Ereignishandlers passieren kann, da die Nachricht aus der AppMessageLoop erst dann verarbeitet wird.

user profile iconpantarhei hat folgendes geschrieben:
Ich muss wirklich hingehen, über einen sep. Button nur die Verbindung herstellen um diese dann nutzen zu können.
Was dann eben genau das ermöglicht, die aktuelle Methode wird beendet, die nächste Nachricht kann bearbeitet werden.

user profile iconpantarhei hat folgendes geschrieben:
Das sieht mir doch schwer nach einem Bug aus.
Nein, das ist völlig korrekt. ;)

user profile iconpantarhei hat folgendes geschrieben:
Oder habe ich da jetzt ein Verständnissproblem bei dem Ganzen?
Ja, ich fürchte schon. :? Du gehst eben nicht auf die Weise ereignisorientiert ran, wie man das unter Windows tun muss, wenn man non-blocking-Sockets verwenden möchte.

Alternativen, um das Problem zu lösen:
a) weiterhin non-blocking-socket-calls: einen Anwendungszustand definieren und entsprechend in den Ereignissen reagieren
b) umstellen auf blocking-socket-calls und mit Threads arbeiten.

Hier findest du in Kapitel 8.3 eine Erläuterung der Problematik. :idea:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.