Einzelnen Beitrag anzeigen

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