Hi,
Dein Code geht nicht weil dieser kompletter Schwachsinn ist.
Ich verstehe die Idee von Deiner Beschreibung her :
- Client A verbindet sich zu Server B
- Server B liesst
IP aus und
ClientB verbindet sich zu Server A
Bei dem Szenario sind aber 2 Server und 2 Clients notwendig.
Über Sinn und Unsinn dieser Methode will ich mich ned äußern.
Für diese Methode übers Internet müßten beide Clients einen offenen Port in der Firewall haben.
Dein genauer Fehler liegt darin das Du innerhalb des TcpServer im OnExecute,
versucht den client der gerade mit deinem server verbunden ist,
erneut zu verbinden, so wie Du es machst würde er theoretisch versuchen
sich mit dem selben Server zu verbinden mit dem er gerade verbunden war
Logikfehler Deinerseits.
Das Hauptproblem ist aber das
Indy mit "Blocking-Sockets" arbeitet,
ich persönlich finde das sehr gut, aber wenn man das nicht weiß
kann es zu Missverständissen kommen.
Deine Procedure OnExecute des Servers läuft innerhalb eines Threads ab
und tritt solange die Verbindung besteht immer und immer wieder ein.
Jetzt versuchst Du innerhalb dieser Procedure den Client "neu zu verbinden".
Theoretisch sollte/müßte dadurch für die erste Verbindung des Client das OnDisconnect
ausgelöst werden und für die neue Verbindung das OnConnect, allerdings wird bei
Dir wahrscheinlich gar nichts passieren, weil der Rechner im OnExecute "festhängt".
Das Problem kann sich unterm Strich auch anders äußern,
trotzdem kann das so nicht funktionieren.
Zitat:
Ich hab noch ein Argument für die Sache mit Client auf beiden Seiten... Wenn ich nämlich auf der einen Seite nur den Server laufen hab, muss ich beim Senden der Nachrichten/Dateien immer überprüfen, ob der User nun auf der Seite des Clients oder auf der des Servers ist. Das wirkt sich vermutlich nicht gerade positiv auf die Perfomance aus... Wenn ich das mit 2 Clients mache, kann ich einfach mit den Funktionen von TIdTCPClient die Strings/Streams verschicken
^^ Schwachsinn, mit Performance hat das nichts zu tuen. Hab jetzt keinen Bock das auch noch breit zu erläutern, glaub mir einfach
Greetz Data
Der Horizont vieler Menschen ist ein Kreis mit Radius Null, und das nennen sie ihren Standpunkt.