AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Indy TCPClient: Readln() Problem
Thema durchsuchen
Ansicht
Themen-Optionen

Indy TCPClient: Readln() Problem

Ein Thema von Kill0r · begonnen am 25. Jun 2005 · letzter Beitrag vom 26. Jun 2005
Antwort Antwort
Kill0r

Registriert seit: 5. Jun 2005
Ort: Zürich
50 Beiträge
 
Delphi 2010 Professional
 
#1

Indy TCPClient: Readln() Problem

  Alt 25. Jun 2005, 21:27
Hi!
Ich hab ein Problem mit der Indy 9 Komponente IdTCPClient.
Ich kann zwar zum Server verbinden und ihm auch Nachrichten schicken, aber mit dem Empfangen gibts Probleme.
Ich hab schon in den anderen Threads geschaut aber so richtig geholfen hat keiner.
Ich lese mit einem Timmer alle 300 Millisekunden die empfangenen Daten aus also mit Readln()
Aber sobald er keine Daten mehr bekommt hängt sich das Programm auf!
Hab schon mal mit try ... except versucht ging auch nicht.
Es gibt ja kein spezielles Event dafür, dass wenn man Daten empfängt irgendwa smachen kann. Ich muss also irgednwie überprüfen, dass wenn er Daten empfängt aber auch nur dann, dass er die ausliest.
Hier mal der Code des Clienten
Delphi-Quellcode:
unit Core;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, OleCtrls, ShockwaveFlashObjects_TLB, IdBaseComponent, IdComponent,
  IdTCPConnection, IdTCPClient, ExtCtrls, StdCtrls, IdAntiFreezeBase,
  IdAntiFreeze;

type
  TMain = class(TForm)
    flash: TShockwaveFlash;
    net: TIdTCPClient;
    timer: TTimer;
    Button1: TButton;
    size: TEdit;
    IdAntiFreeze1: TIdAntiFreeze;
    procedure Button1Click(Sender: TObject);
    procedure netDisconnected(Sender: TObject);
    procedure netConnected(Sender: TObject);
    procedure timerTimer(Sender: TObject);
    procedure flashFSCommand(ASender: TObject; const command, args: WideString);
    procedure FormResize(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Main: TMain;

implementation

{$R *.dfm}

procedure TMain.FormResize(Sender: TObject);
begin
flash.Width := main.ClientWidth;
flash.Height := main.clientHeight;
end;

procedure TMain.flashFSCommand(ASender: TObject; const command,
  args: WideString);
begin
//if (command = '!connect') then
//begin

//end;
end;

procedure TMain.timerTimer(Sender: TObject);
begin
if (net.Connected) then
  begin
    showmessage(net.ReadLn());
  end;
end;

procedure TMain.netConnected(Sender: TObject);
begin
  timer.Enabled := true;
  showmessage('Verbunden');
end;

procedure TMain.netDisconnected(Sender: TObject);
begin
  timer.enabled := false;
end;

procedure TMain.Button1Click(Sender: TObject);
begin
net.Connect(2000);
end;

end.
Der Server schickt die Daten per Writeln.
Ich hoffe ihr könnt mir helfen
Ich bedanke mich im vorraus
  Mit Zitat antworten Zitat
Benutzerbild von Duffy
Duffy

Registriert seit: 19. Mär 2003
Ort: Wuppertal
835 Beiträge
 
Delphi 3 Standard
 
#2

Re: Indy TCPClient: Readln() Problem

  Alt 25. Jun 2005, 23:42
Hallo Kill0r,
dein Programm hängt sich nicht auf, es wartet lediglich bis Daten kommen. Da du aber alle 300ms über fen Timer ein Readln ausführst, wartet sich dein Programm zu Tode.

Schau Dir doch mal die Demos der Indy’s an, da gibt ein gutes Beispiel für einen Server und einen Client. Beides ist ein gutes Gerüst, um darauf aufzubauen.

Bye
Claus
Künftige Generationen wollen ihre Fehler selber machen.
Jedes Programm wird nie das können, was Du wirklich brauchst.
Das Gegenteil von gut ist gut gemeint
-----
  Mit Zitat antworten Zitat
Kill0r

Registriert seit: 5. Jun 2005
Ort: Zürich
50 Beiträge
 
Delphi 2010 Professional
 
#3

Re: Indy TCPClient: Readln() Problem

  Alt 26. Jun 2005, 01:21
Ja ok ich schau mir die Demos an
Danke
Ich find nur merkwürdig das der Server dann wenn der Client wartet, einen Thread Timeout bekommt also die Verbindung ganz rausfliegt. Naja wird wahrscheinlich irgendie überlastet sein der Client, das es die verbindung raushaut.
Der Thread kann nun geschlossen werden

Cu
Kill0r
  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 03:33 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