AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi TIdTCPClient hängt sich bei ReadLn auf
Thema durchsuchen
Ansicht
Themen-Optionen

TIdTCPClient hängt sich bei ReadLn auf

Ein Thema von Win32.API · begonnen am 14. Feb 2006 · letzter Beitrag vom 15. Feb 2006
Antwort Antwort
Win32.API

Registriert seit: 23. Mai 2005
312 Beiträge
 
#1

TIdTCPClient hängt sich bei ReadLn auf

  Alt 14. Feb 2006, 13:07
Sers,
ich habe folgende Funktion um die Ankommenden Strings eines TIdTCPClients zu empfangen. Das funktioniert soweit auch gut,
wenn ich aber versuche die Form zu verschieben hängt sich das Programm auf. Der "Rahmen" ,der beim verschieben angezeigt wird, friert ein und die Maus kann ich auch nicht mehr auf die Taskleiste ziehen vorher hält mich eine Unsichtbare Wand auf ... Das ganze kann man nur mach mit dem Taskmgr beenden.
Das Interval des Timers ist 300, ein Antifreeze ist auch vorhanden mit einem IdleTimeOut von 250 und OnlyWhenIdle true.


Delphi-Quellcode:
procedure TForm1.Read_TimerTimer(Sender: TObject);
var
  s: string;
begin
      try
        repeat
          Application.ProcessMessages;
          s := Command_TCP.ReadLn;
          if s <> 'then
            begin
              Listbox1.Items.Add(s);
            end;
        until s = '';
      except
        Command_TCP.Disconnect;
      end;
end;
greetz
  Mit Zitat antworten Zitat
Sebastian R.

Registriert seit: 12. Feb 2006
94 Beiträge
 
#2

Re: TIdTCPClient hängt sich bei ReadLn auf

  Alt 14. Feb 2006, 13:30
Setzt das Application.ProcessMessages mal ans Ende der repeat-Schleife.
Sebastian R.
Keep on programming!


CyCode.net - Meine Programme, Tutorials und Quelltexte
  Mit Zitat antworten Zitat
Win32.API

Registriert seit: 23. Mai 2005
312 Beiträge
 
#3

Re: TIdTCPClient hängt sich bei ReadLn auf

  Alt 14. Feb 2006, 13:36
Danke fuer deine Antwort, aber wenn ich das ProcessMessages ans Ende setzte gibt es keine Veränderung und das Programm stürzt weiterhin ab.


greetz
  Mit Zitat antworten Zitat
Sebastian R.

Registriert seit: 12. Feb 2006
94 Beiträge
 
#4

Re: TIdTCPClient hängt sich bei ReadLn auf

  Alt 14. Feb 2006, 13:45
Komisch, müsste eigentlich klappen. Nimm mal eine while-Schleife.

Delphi-Quellcode:
while s <> 'do begin
  Application.ProcessMessages;
  s := Command_TCP.ReadLn;
  if s <> 'then
  begin
    Listbox1.Items.Add(s);
  end;
end;
Command_TCP.Disconnect;
Oder du schreibst einfach so etwas in das OnRead/OnExecute-Event:

Delphi-Quellcode:
// Indy-Beispiel
begin
  ListBox1.Items.Add(AThread.Connection.ReadLn);
end;
MfG, Sebastian R.

[EDIT]Ich habe nochmal deinen Text oben gelesen. Du hast ja eine Schleife in dem Timer drin. Der wartet solange bis was ankommt. Aber wenn der Interval auf 300 ms steht, dann führt der das ja zu oft aus![/EDIT]
Sebastian R.
Keep on programming!


CyCode.net - Meine Programme, Tutorials und Quelltexte
  Mit Zitat antworten Zitat
Win32.API

Registriert seit: 23. Mai 2005
312 Beiträge
 
#5

Re: TIdTCPClient hängt sich bei ReadLn auf

  Alt 14. Feb 2006, 14:02
Zitat von Sebastian R.:
Komisch, müsste eigentlich klappen. Nimm mal eine while-Schleife.

Delphi-Quellcode:
while s <> 'do begin
  Application.ProcessMessages;
  s := Command_TCP.ReadLn;
  if s <> 'then
  begin
    Listbox1.Items.Add(s);
  end;
end;
Command_TCP.Disconnect;
Oder du schreibst einfach so etwas in das OnRead/OnExecute-Event:

Delphi-Quellcode:
// Indy-Beispiel
begin
  ListBox1.Items.Add(AThread.Connection.ReadLn);
end;
MfG, Sebastian R.

[EDIT]Ich habe nochmal deinen Text oben gelesen. Du hast ja eine Schleife in dem Timer drin. Der wartet solange bis was ankommt. Aber wenn der Interval auf 300 ms steht, dann führt der das ja zu oft aus![/EDIT]
OK das mit der while Schleife bringt nix, TIdTCPClient hat kein OnRead oder OnExecuet Event.
Auf wieviel soll ich den Timer denn dann stellen? Oder gibt es eine bessere Methode als das mit einem Timer zu realisieren?


greetz
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#6

Re: TIdTCPClient hängt sich bei ReadLn auf

  Alt 14. Feb 2006, 14:05
Am besten wäre ein Thread, nach dem Motto
Delphi-Quellcode:
try
        repeat
          Application.ProcessMessages;
          s := Command_TCP.ReadLn;
          if s <> 'then
            begin
              synchronize (...); // String am Hautthreat weitergeben
            end;
        until s = '';
      except
        Command_TCP.Disconnect;
      end;
  Mit Zitat antworten Zitat
Win32.API

Registriert seit: 23. Mai 2005
312 Beiträge
 
#7

Re: TIdTCPClient hängt sich bei ReadLn auf

  Alt 14. Feb 2006, 14:19
Wie meinst du das? Soll ich den ganzen Timer in einen Thread auslagern? Oder soll ich soll ich jedes mal im Timer Event einen neuen Thread createn?


greetz

//Edit: Habe den Timer durch einen Thread mit einer Endlosschleife ersetzt.
  Mit Zitat antworten Zitat
Sebastian R.

Registriert seit: 12. Feb 2006
94 Beiträge
 
#8

Re: TIdTCPClient hängt sich bei ReadLn auf

  Alt 15. Feb 2006, 07:41
Das Empfangen von Daten mitteles eines Clienten klappt auch nur, wenn du etwas versendet hast. Ein Client ist zum Schicken da, nicht um zu Empfangen. Folgendes klappt zwar:

Delphi-Quellcode:
IdTCPClient1.Connect;
IdTCPClient1.WriteLn('hallo');
s := IdTCPClient1.ReadLn;
IdTCPClient.Disconnect;
Da wird aber vom Server etwas zurückgeschickt. Wenn du nur Daten empfangen willst, dann nimm doch einen Server. Der kann auch antworten auf Client-Anfragen!
Sebastian R.
Keep on programming!


CyCode.net - Meine Programme, Tutorials und Quelltexte
  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 00:30 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