AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Indy TCP Client-Server Problem
Thema durchsuchen
Ansicht
Themen-Optionen

Indy TCP Client-Server Problem

Ein Thema von RedShakal · begonnen am 13. Jul 2009 · letzter Beitrag vom 14. Jul 2009
Antwort Antwort
Benutzerbild von DataCool
DataCool

Registriert seit: 10. Feb 2003
Ort: Lingen
909 Beiträge
 
Delphi 10.3 Rio
 
#1

Re: Indy TCP Client-Server Problem

  Alt 14. Jul 2009, 08:36
Hi,

erstmal würde ich im Servercode die überprüfung der Userdaten ins OnConnect Event verschieben
und im OnExecute nur Deine "wirklichen" Kommandos verarbeiten.
Bei fehlerhaften Logindaten kann man auch ruhig mal die Connection dicht machen

Dein Hauptproblem ist aber Du anscheinend annimmst komplett mit Events im Client arbeiten zu können.
Es gibt aber kein OnData oder ähnliches.
Indy arbeitet mit "Blocking Sockets", die sauberste und eleganteste Lösung ist die komplette Kommunikation des Clients
in einen Thread auszulagern, damit erschlägst Du dann auch gleich ein paar andere Probleme(Einfrieren der Anwendung etc.).

Ich vermute das bei Dir das Event und ClientConnect Event gar nicht oder nicht dann eintritt, wenn Du es erwartest.

Du solltest so vorgehen:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
Var sTmp : String;
begin
  Benutzername := Username.Text;
  Client.Connect(5000);
  if not Client.connected then
  begin
    ShowMessage('Konnte keine Verbindung herstellen');
    exit;
  end;
  // ShowMessage('Verbindung hergestellt');
  Client.Socket.Write('Login' + '|' + Form1.Username.Text + '|' + Form1.Passwort.Text);
  // spätestens ab hier sollte jetzt alles in einen Thread ausgelagert werden
  While Client.connected do
  begin
    sTmp := Client.Socket.Readln; // Read-Timeout vorher setzen oder über Parameter
    if sTmp <> 'then
    begin
      // mache irgentwas mit der Servernachricht
    end;
  end;
end;
So der grobe Ablauf, ohne Garantie(habs eben ohne IDE getippt).
Aber Auslesen der Serverdaten sollte definitiv innerhalb eines Threads ablaufen,

Greetz Data
Der Horizont vieler Menschen ist ein Kreis mit Radius Null, und das nennen sie ihren Standpunkt.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:09 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