![]() |
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 |
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 |
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 |
klick mal vor dem TidTCPServer auf das Plus-Zeichen
mat |
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:
also.. der Client shickt dem Server , dass er eine Datei downloaden will
TCPClient.SendCmd('Download' + (edit2.Text));
(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 |
kanna da ??
|
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 11:29 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