Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi INDY TCP/IP-Server Commands (https://www.delphipraxis.net/5681-indy-tcp-ip-server-commands.html)

Hanswurst 15. Jun 2003 17:23


INDY TCP/IP-Server Commands
 
Moin Leutz
ich bin grade dabei , ein Serverproggi mit den INDYs (TCP/IP-Server) zu schreiben , ja den Client hab ich schon fertig :) , der auf Commands , die der Client schickt , antwortet ..
beim Client gibts ja SendCMD ..
aber wie kann man beim Server festlegen , was er bei welchen Commands macht ??

THX 4 Reply

Bis denn
CU

Biggs 15. Jun 2003 22:22

Am einfachsten geht das mit einem TIdCommandHandler.

Diese Collection ist Bestandteil der Properties von TIdTCPServer.

Einfach soviele Commandhandler dazufügen, wie man braucht und dann noch die entspr. Parameter der Handler anpassen (Trennzeichen, Command etc.)
und die entspr. Methods mit den Antworten füllen und das wars dann schon.

Henri

Hanswurst 16. Jun 2003 09:32

Namd Leutz
den CommandHandler hab ich gefunden , blick da aber net so durch ..
ich hab schon gegooglet und in der Hilfe gegückt , hab aber nix gefunden ..

könnteste mir da bitte maln Beispiel zeigen ??

THX

Bis denn
CU

Mat 16. Jun 2003 10:14

klick mal vor dem TidTCPServer auf das Plus-Zeichen


mat

Hanswurst 16. Jun 2003 10:39

Namd Leutz
@Mad
THX habs gefunden ..
es funzt ..
danke ..

nur noch 1 Frage :

ich habn Proggi zum Datenaustausch mit TCP/IP geschrieben ..
und im Client hat man dann 2 edit-Felder , in denen man die Quell- und die Zieldatei angibt ..
beim Client hab ich nen button mit OnClick und ..
Delphi-Quellcode:
TCPClient.SendCmd('Download' + (edit2.Text));
also.. der Client shickt dem Server , dass er eine Datei downloaden will
(SendCMD('Download' ..))
und direkt noch im Command , welche Datei es sein soll
(+ (edit2.text))

nur wie sag ich dem Server , dass er die Datei , die im edit2.text beim Client steht , zum CLient schickt ??

das schicken mach ich mit sendstream bzw writestream , aber mein Problem is , wie sag ich dem CommandHandler , dass er die Datei , die ja sogesehen eine Variable is (edit2.text), schicken soll ??

Bis denn
CU

Hanswurst 16. Jun 2003 12:15

kanna da ??

Biggs 20. Jun 2003 01:55

Also, sagen wir mal du hast nen Commandhandler gemacht der auf das Kommando download reagiert, hast als CmdDelimiter ein Leerzeichen genommen und der Client sendet :

SendCMD('Download ' + edit1.text)

Beim server ergibt das den folgenden Event :

procedure TfrmMain.IdTCPServerDownloadCommand(ASender: TIdCommand);
var
cFileName: String;
fStream: TFileStream;
begin
cFileName := ASender.Params[0];

Und jetzt hast du den Filenamen, den der Client angefordert hat.
Alle Parameter, die hinter dem CmdLimiter folgen, werden als
Params[0]...Params[n] angesehen, je nachdem, wieviele Parameter du dem Command hast folgen lassen, das lässt sich mit Params.Count feststellen.

Und jetzt brauchst du ja nur die Datei zu senden, z.B. so :

fStream := TFileStream.Create(cFileName,fmOpenRead + fmShareDenyNone);
ASender.Thread.Connection.OpenWriteBuffer;
ASender.Thread.Connection.WriteStream(fStream);
ASender.Thread.Connection.CloseWriteBuffer;

HTH

Henri


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:19 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