Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Indy und die Kommunikation. So richtig? (https://www.delphipraxis.net/152180-indy-und-die-kommunikation-so-richtig.html)

Jackie1983 14. Jun 2010 12:57


Indy und die Kommunikation. So richtig?
 
Hi,

durch einen anderen Beitrag (Daten sicher übertragen) wurde ich hingewiesen meine Anwendung bzw. dessen Kommunikation übers Internet mit Indy zu lösen, da diese schön SSL können.

Jetzt habe ich mal ein wenig geschaut.
verstehe ich das jetzt so richtig.

Das ist der Demo Server. Sobald sich ein Client anmeldet und einen Text sendet wird dieser wieder zurück gesendet.
Delphi-Quellcode:
procedure TForm1.TCPServerExecute(AThread: TIdPeerThread);
var
  msg : string;
begin
  msg := AThread.Connection.ReadLn;
  with AThread.Connection do
  begin
    WriteLn(msg+Inttostr(Random(100)));
  end;
end;
Bei den Clients erstellen ich die Komp direkt beim Starten der Anwendung und verbinde mit dem Server.

Das Senden sieht so aus.
Delphi-Quellcode:
  TCPClient.WriteLn('Hallo. ');
  ListBox1.Items.Add(TCPClient.ReadLn);
Ist das so richtig, das ich beim Server immer mit ReadLn warte bis was von irgend einem Client kommt?

So könnte ich dann auch größere Anwendungen erstellen, was noch fehlt ist ein Protokoll und eine überprüfung ob die Verbindung noch "lebt"
Gruß Thomas

Namenloser 14. Jun 2010 13:30

AW: Indy und die Kominikation. So richtig?
 
Kommunikation.

Jackie1983 14. Jun 2010 13:48

AW: Indy und die Kominikation. So richtig?
 
was fehlt denn noch?
Möchte nur wissen ob ich am Server mit ReadLn warten kann bis daten kommen.
Oder ob es eine bessere Lösung gibt...

Namenloser 14. Jun 2010 13:56

AW: Indy und die Kominikation. So richtig?
 
Im Prinzip sollte das so funktionieren, ja. Diese Arbeitsweise nennt man auch "blockierend", weil eben das Programm (bzw der Thread) immer so lange wartet, bis Daten eintreffen. Es gibt auch andere Ansätze, die z.B. Polling verwenden, was bei manchen High-Performance-Geschichten angeblich Vorteile bringen soll (habe ich mal gehört, auch wenn ich es mir kaum vorstellen kann, aber ich bin auch kein Experte), aber in der Regel tut es der blockierende, sprich dein, Ansatz.

Bitte korrigiere den Thread-Titel.

Jackie1983 14. Jun 2010 14:13

AW: Indy und die Kominikation. So richtig?
 
Lol ok, jetzt weis ich was du meinst :shock: :D
Dachte ich hätte nicht genau das Problem beschrieben :roll:

Naja, werde ich machen

Jackie1983 14. Jun 2010 15:17

AW: Indy und die Kommunikation. So richtig?
 
ok dann habe ich noch eine Frage. Wenn der Thread bei Readln wartet und ich den Server beende, wird die Anwendung nicht beendet, wie kann ich jetzt das ReadLn abbrechen so das die Anwendung geschlossen wird...

[Edit]
Der Client Server soll senden und empfangen. Wie löse ich das. Weil wenn ich bei ReadLn bin und möchte text versenden muss ich ja erst warten bis ReadLn fertig ist.

Dachte mir für den Client einen ReadThread zu erstellen, wenn eine Nachricht kommt wird diese an den Hauptthread weiter gegeben zum verarbeiten.

Das gleiche beim Server. Dort gibt es dann auch ein Read Thread. Damit der Server auch senden kann wenn er wo anders auf Daten wartet.

Oder gibt es da ne besser Lösung?


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:50 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz