Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Indy - Demo Chat (https://www.delphipraxis.net/15347-indy-demo-chat.html)

HDieterH 26. Jan 2004 21:54


Indy - Demo Chat
 
Hallo zusammmen,

leider habe ich vergebens gesucht und entschuldige mich schon jetzt für die Frage, aber leider konnte ich keine Antwort finden, die mir weitergeholfen hätte.

Es geht um das ReadLn des Clients .. wenn ich keine Strings vom Server bekomme hängt der Client und ich kann dann nur noch warten bis ich a. schwarz bin. b. mit dem Server eine Nachricht schicke der c. mit dem Server den Client abschiesse :-(
Der Befehl an sich Msg := IdTCPClient1.ReadLn(#$0A , 250, -1);
sollte eigentlich 250 mS warten und dann die Procedure meines Timers durchlaufen. Tut er aber nicht wenn vom Server nichts gesendet wird.
Mein TimerInterval steht auf 500mS
Mein IdTCPClient.readTimeOut steht auch auf 250 mS

Kann mir bitte einer Helfen, da ich eigentlich nicht diesen DemoChat brauche, aber schon gern die Indy Komponenten benutzen würde.

MFG, Dieter

Synonym 26. Jan 2004 22:07

Re: Indy - Demo Chat
 
ein bischen mehr code wäre von Vorteil!

synonym

HDieterH 26. Jan 2004 22:13

Re: Indy - Demo Chat
 
Zitat:

Zitat von Synonym
ein bischen mehr code wäre von Vorteil!

synonym

Hallo, kann ich machen ... nur dachte ich schon, dass dieses ChatDemo jeder kennt :-(

Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
var
  Com,
  Msg : String;
begin

  if not IdTcpClient1.Connected then
    exit;

{ Wenn hier vom Server kein String kommt, dann kommt der nie über diese Zeile } 
Msg := IdTCPClient1.ReadLn(#$0A , 250, -1);
{ also, hier hin :-( }

  if Msg <> '' then
    if Msg[1] <> '@' then
      begin
      { Not a system command }
        memLines.Lines.Add(Msg);
      end
    else
      begin
      { System command }
        Com := UpperCase(Trim(Copy(Msg, 2, Pos(':', Msg) -2)));
        Msg := UpperCase(Trim(Copy(Msg, Pos(':', Msg) +1, Length(Msg))));
        if Com = 'CLIENTS' then
          lbClients.Items.CommaText := Msg;
      end;

end;
reicht das fürs erste ?

Schon mal Danke für das Interesse, Dieter

[edit=r_kerber]Delphi-Tags eingefügt. Mfg, r_kerber[/edit]

Synonym 26. Jan 2004 22:20

Re: Indy - Demo Chat
 
vielleicht überschneiden sich die zeiten...
und bevor readln ausgeführt wird versucht der timer wieder alles neu!

synonym

HDieterH 26. Jan 2004 22:27

Re: Indy - Demo Chat
 
Zitat:

Zitat von Synonym
vielleicht überschneiden sich die zeiten...
und bevor readln ausgeführt wird versucht der timer wieder alles neu!

synonym

Leider nein, ich habe das ganze mal in ein OnClick Event von einem Button ausgeführt, und auch dort bleibt er hängen wenn von Server nichts gesendet wird :-(.

Auch habe ich schon aus den Indy/Misc die Komponente IdAntiFreeze ausprobiert. Das geht zwar dann mit dem senden aus dem Client heraus, aber:
1. Kann ich nicht mehr mein Fenster verschieben oder irgendwas andreres selektieren
2. nach dem beenden, was auch nur über den Server klappt mit ( client abschiessen ) kommen 1000 meldungen, dass der Client erfolgreich beendet wurde.
Also kein Ergebnis mit dem ich zufieden sein könnte :-(
MFG, Dieter

EConvertError 28. Jan 2004 17:32

Re: Indy - Demo Chat
 
Hallo!

Das Problem habe ich auch mit Delphi 7 (mit Delphi 6 gibt es keine Probleme). Es ist scheinbar ein Fehler in der Komponente oder so was.

Wenn du nach Beiträgen mit meinem Namen suchst, dann dürftest du den Thread finden.

Ich selbst habe eine Lösung mit Hilfe des IdTCPDemos (bei den Indy Demos dabei) gefunden. ReadBuffer funktioniert nämlich.

mfg,
EConvertError


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