Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi [Indy 10] Indy - Zusammenfassende Fragen (https://www.delphipraxis.net/82857-%5Bindy-10%5D-indy-zusammenfassende-fragen.html)

Dragon27 20. Dez 2006 19:19


[Indy 10] Indy - Zusammenfassende Fragen
 
:wall: :wall: Hallo,

ich möchte Euch hier um ein die Richtigstellung einiger Aussagen bitten.

1. Indy 10 ist nicht Eventgesteuert und man muss mit einem Timer den Server abfragen (steht so in einem Anderen Thread)
-verstehe ich nicht... die Indys haben doch Ereignisse.... also auch Execute oder?
-wie kann ich einen Client einzeln und gezielt ansprechen?

2. Bindings

-Wenn ich den Server online stelle muss ich diesem ein neues Binding zuweisen/machen:

Delphi-Quellcode:
var ABinding: TIdSocketHandle;
//...
server.Bindings.Clear;
ABinding := Server.Bindings.Add;
ABinding.IP := Binding;
ABinding.Port := strtoint(port);
Server.Active := True;
//..
-Warum kann ich mehrere Bindings machen? Wie sind diese Dinger zu verstehen? Bei den Sockets reicht doch auch nur ein Binding?
-Ich habe hier im Forum auch gelesen, dass die Clients über die Bindings angesprochen werden ... Bahnhof :wall:

3. Unterschied zu den Sockets

-Bei den Sockets muss ich VOR der Verarbeitung immer überprüfen ob alle Pakete/bestandteile des Befehles da sind.... Wie
ist das bei den Indys?
-Gibt es bei den Indys auch sowas wie ein Handle auf die einzelnen Clients über die man dann gezielt ansprechen kann?

Tut mir leid wenn das sehr sehr viele Fragen auf einmal sind aber ich denke sie gehören einfach alle zusammen. Da ich die 10er Indys habe finde ich auch nur sehr sehr wenig Material.

Danke für Eure Mühe und Hilfe!!!!

Gruß

Dragon27

inherited 20. Dez 2006 19:43

Re: [Indy 10] Indy - Zusammenfassende Fragen
 
Hi.
Zu 1:
Der Indy-Client ist nicht Event-gesteuert. Soll heißen: er merkt nicht wenn der Server etwas schickt.
Zu 3:
Dafür gibt es bei den Indys die Funktionen "WriteLn" und "ReadLn", dass heisst, es wird solange gelesen bis #13#10 kommt und an den String wird am Ende bei WriteLn noch ein #13#10 drangehängt ;)

Dragon27 20. Dez 2006 19:47

Re: [Indy 10] Indy - Zusammenfassende Fragen
 
Hallo,

danke für deine Antwort! Ehm was ich dann noch nich verstehe... Wie frage ich dann ab ob etwas geschickt wurde?

Also liege ich da richtig, dass ich einen Timer machen muss der immer und immer wieder ReadLn macht?
Können da nicht Daten verloren gehen?

Und wie kann ich dann einzelne Clients über den Server ansprechen ... ohne handle?

Danke!

inherited 20. Dez 2006 19:56

Re: [Indy 10] Indy - Zusammenfassende Fragen
 
Nein, da können kine Daten verloren gehen, weil es dafür einen Buffer gibt.

Dragon27 20. Dez 2006 20:53

Re: [Indy 10] Indy - Zusammenfassende Fragen
 
Danke dir für deine Hilfe!

Ich versuch jetzt schon ewig einen Chat hinzubekommen und es geht nie etwas! Entweder denke ich zu komplex oder ich weiß es auch nicht. Indy 10 Tutorials findet man nirgens und fertigen Programmcode mag ich ehrlich gesagt nicht....

Also ich habe jetzt verstanden, dass ich mit dem Client immer wieder beim Server nachfragen muss ob was da ist.... aber wie sende ich jetzt an den Client etwas bzw. wie gebe ich Daten in den Serverpuffer....

Habe nirgens ein WiriteLN beim Server gefunden und wie kann ich die Clients unterscheiden? Währe echt nett wenn mir das noch jemand sagen könnte. Und das mit den Bindings ist auch noch so ein Rätsel...

Herzlichen Dank!

inherited 20. Dez 2006 21:01

Re: [Indy 10] Indy - Zusammenfassende Fragen
 
Mach es doch in etwa so:

Aktion - Reaktion
Client loggt sich ein - Server fügt der Userliste den Client zu und sendet true oder false zurück, ob es geklappt hat (Fault wegen doppeltem Benutzername zB)
Client sendet Nachricht - Server fügt jedem Client (Klasse TClient mit Stringlist zB) Die Message hinzu für den sie bestimmt ist
Client (periodisch) fragt nach neuen Daten - Server setzt regelmäßig inkrementierte Ping-Variable zurück(Ach den User gibt es doch noch :mrgreen: ) und sendet dem Client alle Messages sowie die Userliste und leert die Client-Stringlist. Der client hängt die Messages an.

Das wars auch schon. Wenn du fragen hast, frag.

Dragon27 21. Dez 2006 10:32

Re: [Indy 10] Indy - Zusammenfassende Fragen
 
So Hallo nochmal,

also habe jetzt schon einiges herausbekommen und habe versucht beim Server etwas abzufragen. Das funktioniert auch... jedoch hängt bei dem folgenden Quelltext NACH dem empfanden des Textes das Programm:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, ExtCtrls,
  StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Timer1: TTimer;
    client: TIdTCPClient;
    ListBox1: TListBox;
    Button1: TButton;
    Button2: TButton;
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Timer1Timer(Sender: TObject);
begin
Listbox1.items.add(client.Socket.ReadLn);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
client.Connect;
sleep(1500);
application.ProcessMessages;


end;

procedure TForm1.Button2Click(Sender: TObject);
begin
client.Socket.WriteLn('s');
application.ProcessMessages;
timer1.Enabled:=true;
application.ProcessMessages;
end;

end.
Was mache ich falsch?

Danke für die gute Hilfe!

jokerfacehro 21. Dez 2006 10:40

Re: [Indy 10] Indy - Zusammenfassende Fragen
 
Hallo !

es ist eher so gemeint:
in einem bestimmten interval sendet erstmal der client dem server dass, er noch da ist.
der client wartet dann auf daten.
in der zeit sendet der server dem client daten z.B. neuen text, die userliste und so weiter

:D :D :D

Frohe Weihnachten und viel Standfestigkeit für Silvester :mrgreen:

inherited 21. Dez 2006 13:37

Re: [Indy 10] Indy - Zusammenfassende Fragen
 
Klar dass es hängt: Wenn der Server sich "Tot-stellt" und dem Client nichts zurücksendet, wartet dieser bis in alle Ewigkeit ;)

Dragon27 21. Dez 2006 14:33

Re: [Indy 10] Indy - Zusammenfassende Fragen
 
Hallo,

mhm danke ertsmal für Eure super Hilfe! Bin schon wesentlich weiter *freu*

Ich hab aber grad echt keine Ahnung wie ich das Problem codemäßig angehen soll :-(

Sagen wir mal ich will einfach Kommandos schicken.... und diese auswerten. Nun habe
ich aber beim Server 10 Kommandos zum abschicken bereitgestellt aber ich rufe ja bei
dem Timer nur immer 1 mal das Readln auf :-(

Das nächste ist dann nich einen speziellen Client anzusprechen :-(

Wenn das alles funct bin ich echt glücklich!!

Danke Euch nochmal!!


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:12 Uhr.
Seite 1 von 2  1 2      

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