Einzelnen Beitrag anzeigen

Benutzerbild von jfheins
jfheins

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

Re: TIdTCPclient hängt sich auf

  Alt 19. Dez 2004, 12:07
Zitat:
Ich habe die Lösung gefunden ! Dank dem Timeout von 500 ms ist das jedes mal abgestürzt... Wenn ich da ein Delay von >500 ms einbaue funktioniert es !

Ich habe nämlich grad das gleiche Problem, aber es geht trotzdem nicht ...

Bei folgendem Sourcecode bleibt der Scanner einfach irgendwo stehen (so bei 15 oder so ...) und macht nicht weiter ...
Delphi-Quellcode:
  TScanner = class (TThread)
  public
    ShowStatus: Boolean;
    procedure Execute; override;
  private
    PortOpen: Boolean;
    ScanHost: Byte;
    procedure VCL_State;
    procedure VCL_Add;
  end;

var
  Form1: TForm1;
  Host: Byte = 0;

implementation

{$R *.dfm}

procedure TScanner.Execute;
var
 TCPClient: TIdTCPClient;
begin
 TCPClient := TIdTCPClient.Create(nil);

 while (Host < 254) AND (not Terminated) do
 begin
  inc (Host);
  ScanHost := Host;
  if ShowStatus then synchronize (VCL_State);
  TCPClient.Host := '192.168.0.' + IntToStr (ScanHost);
  TCPClient.Port := 80;

  try
   TCPClient.Connect(1000);
   PortOpen := TRUE;
  except
    PortOpen := FALSE;
  end;
  if TCPClient.Connected then TCPClient.Disconnect;
  synchronize (VCL_Add);
 end;
end;

procedure TScanner.VCL_State;
begin
 Form1.ProgressBar1.StepIt;
 Form1.Label2.Caption := IntToStr(ScanHost);
end;

procedure TScanner.VCL_Add;
begin
 if PortOpen then Form1.ListBox1.Items.Add('192.168.0.' + inttostr (ScanHost))
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 with TScanner.Create(TRUE) do
 begin
  FreeOnTerminate := TRUE;
  ShowStatus := TRUE;
  Resume;
 end;
end;
  Mit Zitat antworten Zitat