![]() |
Indy 10 TCP - Strings unaufgefordert versenden?
Hallo liebe Delphi-Gemeinde,
viel habe ich hier im Forum schon gelernt aus den älteren Posts, diesmal bin ich aber auf direkte Hilfe angewiesen. Ich möchte eine Server/Client-Verbindung, bei dem der Server, wenn er das möchte, unaufgefordert einen String versendet. Der Client müsste sich ja dafür zunächst connecten und dann in eine Art "Lausch"-Modus übergehen. Wie realisiere ich das? Zur Zeit ist es bei mir so, dass ich laut Timer ein Readln ausführe beim Client und der Server ja dann das OnExecute-Ereignis auführt. Das ganze funktioniert auch, nur möchte ich eher, dass der Server entscheidet, wann er was schicken möchte und der Client immer connected ist und auf Strings wartet. Natürlich möchte ich aber auch einen Timeout, falls der Server über eine gewisse Zeit gar nichts mehr sendet. Hier mein bisheriger Code: Connecten:
Delphi-Quellcode:
procedure TForm1.btnServerConnectClick(Sender: TObject);
begin if not TCPClient.Connected then begin TCPClient.Connect; MemoLog.Lines.Add(FormatDateTime('',now)+' *** Successfully connected to Server'); end; end; TimerCycle.Enabled:=true; end; Timer-getriggertes String-holen des Clients:
Delphi-Quellcode:
Und hier der Server:
procedure TForm1.GetData;
begin with TCPClient do begin try S:=IOHandler.ReadLn; MemoLog.Lines.Add(FormatDateTime('',now)+' '+S+' received'); finally Disconnect; end; end; end;
Delphi-Quellcode:
Übrigens hat meine bisherige Lösung noch ein Problem: Nach ca.15 Min erscheint die Meldung "Gracefully Disconnected", wie kommt es dazu?
procedure TForm1.FormCreate(Sender: TObject);
begin if not idTcpServer1.Active then begin idTCPserver1.Active:=true; end; Strings[0]:='00000000000000000000000000000000'; Strings[1]:='FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF'; end; procedure TForm1.IdTCPServer1Execute(AContext: TIdContext); begin with AContext.Connection.iohandler do begin WriteLn(Strings[Random(2)]); end; end; Vielen Dank, Gruß, Klaxon. |
Re: Indy 10 TCP - Strings unaufgefordert versenden?
Habe ich mich irgendwo missverständlich ausgedrückt? Oder ist mit meiner Anfrage einfach zuviel verlangt? Nur ein kleiner Tipp könnte mir schon helfen!
Gruß, Klaxon |
Re: Indy 10 TCP - Strings unaufgefordert versenden?
Hi,
ich kann Dir helfen und auch ne Lösung dazu geben. Aber Du must bist Montag warten, vorher hab ich nicht wirklich Zeit. Gruß Data |
Re: Indy 10 TCP - Strings unaufgefordert versenden?
@Data
Ich würd mich über deine Hilfe freuen! Gruß, Klaxon |
Re: Indy 10 TCP - Strings unaufgefordert versenden?
Hi,
also das ganze erstmal in der Theorie : 1. Client connected zum Server 2. Server macht ein ReadLn ist was da zum auswerten, dann abarbeiten 3. Die Connection von Client zum Server ist in einem Thread gekapselt, nachdem der Client connected ist, macht dieser ebenfalls ein ReadLn mit Timeout 500 ms, ist was da abarbeiten. 4. Wenn Client oder Server was schreiben wollen einfach rein damit (in die Connection) Gruß Data |
Re: Indy 10 TCP - Strings unaufgefordert versenden?
Hi,
soweit verstanden oder irgentwas unklar ? Gruß Data |
Re: Indy 10 TCP - Strings unaufgefordert versenden?
@DataCool
Sorry das ich erst jetzt hier wieder reingucke. Danke für die Tipps, auch wenn ich es nicht ganz verstanden habe. Also 1. ist klar. 2. Warum sollte der Server ein Readln machen? So als eine Art Kommandoabfrage? :gruebel: 3. Der Client macht dann auch ein einmaliges Readln? :gruebel: 4. Ja, wenn man dann einfach kommunizieren kann, könnte ich ja dann sicher hier das machen was ich möchte: Der Server macht ein Writeln(z.B. timer-getriggert) und darauf hin liest der Client das ein. Ich habe das probiert, nur leider kann ich auf meine Prozedur kein OnTimer-Ereignis setzen(inkompatibel). Neue Server-Prozedur:
Delphi-Quellcode:
Nur wie rufe ich IdTCPServer1Cycle auf?
procedure TForm1.IdTCPServer1Cycle(AContext: TIdContext);
begin with AContext.Connection.iohandler do begin WriteLn(Strings[Random(2)]); end; end; Und wie muss dann der Client aussehen, damit er kontinuierlich checked, ob der Server was geschrieben hat? Gibt es da evtl. auch ein OnExecute? :gruebel: Danke für die Hilfe, Gruß, Klaxon. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:53 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