AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Indy 10 TCP - Strings unaufgefordert versenden?
Thema durchsuchen
Ansicht
Themen-Optionen

Indy 10 TCP - Strings unaufgefordert versenden?

Ein Thema von Klaxon · begonnen am 31. Aug 2006 · letzter Beitrag vom 16. Sep 2006
Antwort Antwort
Klaxon

Registriert seit: 31. Aug 2006
10 Beiträge
 
#1

Indy 10 TCP - Strings unaufgefordert versenden?

  Alt 31. Aug 2006, 10:53
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:
procedure TForm1.GetData;
 begin
with TCPClient do begin
    try
      S:=IOHandler.ReadLn;
      MemoLog.Lines.Add(FormatDateTime('',now)+' '+S+' received');
    finally
      Disconnect;
    end;
  end;
 end;
Und hier der Server:

Delphi-Quellcode:
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;
Übrigens hat meine bisherige Lösung noch ein Problem: Nach ca.15 Min erscheint die Meldung "Gracefully Disconnected", wie kommt es dazu?

Vielen Dank, Gruß,
Klaxon.
  Mit Zitat antworten Zitat
Klaxon

Registriert seit: 31. Aug 2006
10 Beiträge
 
#2

Re: Indy 10 TCP - Strings unaufgefordert versenden?

  Alt 4. Sep 2006, 13:10
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
  Mit Zitat antworten Zitat
Benutzerbild von DataCool
DataCool

Registriert seit: 10. Feb 2003
Ort: Lingen
909 Beiträge
 
Delphi 10.3 Rio
 
#3

Re: Indy 10 TCP - Strings unaufgefordert versenden?

  Alt 9. Sep 2006, 21:33
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
Der Horizont vieler Menschen ist ein Kreis mit Radius Null, und das nennen sie ihren Standpunkt.
  Mit Zitat antworten Zitat
Klaxon

Registriert seit: 31. Aug 2006
10 Beiträge
 
#4

Re: Indy 10 TCP - Strings unaufgefordert versenden?

  Alt 12. Sep 2006, 11:18
@Data

Ich würd mich über deine Hilfe freuen!

Gruß,
Klaxon
  Mit Zitat antworten Zitat
Benutzerbild von DataCool
DataCool

Registriert seit: 10. Feb 2003
Ort: Lingen
909 Beiträge
 
Delphi 10.3 Rio
 
#5

Re: Indy 10 TCP - Strings unaufgefordert versenden?

  Alt 12. Sep 2006, 11:28
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
Der Horizont vieler Menschen ist ein Kreis mit Radius Null, und das nennen sie ihren Standpunkt.
  Mit Zitat antworten Zitat
Benutzerbild von DataCool
DataCool

Registriert seit: 10. Feb 2003
Ort: Lingen
909 Beiträge
 
Delphi 10.3 Rio
 
#6

Re: Indy 10 TCP - Strings unaufgefordert versenden?

  Alt 12. Sep 2006, 20:51
Hi,

soweit verstanden oder irgentwas unklar ?

Gruß Data
Der Horizont vieler Menschen ist ein Kreis mit Radius Null, und das nennen sie ihren Standpunkt.
  Mit Zitat antworten Zitat
Klaxon

Registriert seit: 31. Aug 2006
10 Beiträge
 
#7

Re: Indy 10 TCP - Strings unaufgefordert versenden?

  Alt 16. Sep 2006, 12:36
@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?

3. Der Client macht dann auch ein einmaliges Readln?

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:
procedure TForm1.IdTCPServer1Cycle(AContext: TIdContext);
begin
  with AContext.Connection.iohandler do
  begin
    WriteLn(Strings[Random(2)]);
  end;
end;
Nur wie rufe ich IdTCPServer1Cycle auf?

Und wie muss dann der Client aussehen, damit er kontinuierlich checked, ob der Server was geschrieben hat? Gibt es da evtl. auch ein OnExecute?

Danke für die Hilfe,
Gruß,
Klaxon.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:20 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