Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Internet
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Colaboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-12-2015
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 17
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Podes probar de esta manera

MainForm;

Código Delphi [-]
unit Unit1;

interface

uses
  Windows,
  Messages,
  SysUtils,
  Variants,
  Classes,
  Graphics,
  Controls,
  Forms,
  Dialogs,
  StdCtrls;

type
  TForm1 = class(TForm)
    ListBox1: TListBox;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  strict private
    procedure OnWorkFinish(Sender: TObject; const AResult: Boolean; const AIpAdress: string);
  end;

var
  Form1: TForm1;

implementation

uses
  UThread;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
const
  base = '192.168.1.';
var
  i: Integer;
  LWorker: TIpWorker;
begin
  ListBox1.Items.Clear;

  for i := 1 to 3 do
  begin
    LWorker := TIpWorker.Create(base + IntToStr(I), OnWorkFinish);
    LWorker.Execute;
  end;
end;

procedure TForm1.OnWorkFinish(Sender: TObject; const AResult: Boolean; const AIpAdress: string);
begin
  TThread.Queue(NIL,
    procedure
    begin
      ListBox1.Items.Add(Format('Resultado = %s, IP [%s] ', [BoolToStr(AResult, True), AIpAdress]));
    end);
end;

end.

Código Delphi [-]
unit UThread;

interface

uses
  Classes,
  ScktComp;

type
  TIpWorkerEvent = procedure(Sender: TObject; const AResult: Boolean; const AIpAdress: string) of object;

  TIpWorker = class(TThread)
  strict private
    FSocket: TClientSocket;
    FOnWorkFinish: TIpWorkerEvent;
    procedure SetOnWorkFinish(const Value: TIpWorkerEvent);
  public
    constructor Create(const AAdress: string; AOnFinish: TIpWorkerEvent);
    destructor Destroy; override;
    procedure Execute; override;
    property OnWorkFinish: TIpWorkerEvent read FOnWorkFinish write SetOnWorkFinish;
  end;

implementation

{ TIpWorker }

constructor TIpWorker.Create(const AAdress: string; AOnFinish: TIpWorkerEvent);
begin
  inherited Create(True);
  FreeOnTerminate := True;
  FOnWorkFinish := AOnFinish;
  FSocket := TClientSocket.Create(NIL);
  FSocket.Address := AAdress;
  FSocket.ClientType := ctBlocking;
  FSocket.Port := 80;
end;

destructor TIpWorker.Destroy;
begin
  FSocket.Free;
  inherited;
end;

procedure TIpWorker.Execute;
begin
  try
    try
      FSocket.Open;
    except

    end;
  finally
    if Assigned(FOnWorkFinish) then
      FOnWorkFinish(Self, FSocket.Active, FSocket.Address);
    Terminate;
  end;
end;

procedure TIpWorker.SetOnWorkFinish(const Value: TIpWorkerEvent);
begin
  FOnWorkFinish := Value;
end;

end.

Aunque la verdad la implementacion TClientSocket es una lagrima: no tiene para establecer TimeOut
Responder Con Cita
  #2  
Antiguo 16-12-2015
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 17
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Vaya, pesimo de mi parte

El metodo TThread.Execute deberia estar en la seccion protegida de la clase

Código Delphi [-]
  TIpWorker = class(TThread)
  strict private
    FSocket: TClientSocket;
    FOnWorkFinish: TIpWorkerEvent;
    procedure SetOnWorkFinish(const Value: TIpWorkerEvent);
  protected
    procedure Execute; override;
  public
    constructor Create(const AAdress: string; AOnFinish: TIpWorkerEvent);
    destructor Destroy; override;
    property OnWorkFinish: TIpWorkerEvent read FOnWorkFinish write SetOnWorkFinish;
  end;


Y nunca deberiamos llamar a Execute directamente, sino Start

Código Delphi [-]
  for i := 1 to 255 do
  begin
    LWorker := TIpWorker.Create(base + IntToStr(I), OnWorkFinish);
    LWorker.Start;
  end;
Responder Con Cita
  #3  
Antiguo 17-12-2015
josepicd josepicd is offline
Miembro
 
Registrado: jun 2015
Posts: 57
Poder: 12
josepicd Va por buen camino
Gracias a todos y en especial a AgustinOrtu, me ha servido de mucha ayuda. Tema resuelto.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Recibir múltiples respuestas en TIdUDPClient después de un BroadCast gluglu Redes 0 29-07-2011 10:31:42
Utilizar el Broadcast del UDP! fide Internet 10 11-11-2007 05:40:38
Hacer un Broadcast miguel_e Varios 0 09-01-2006 16:47:38
Como Calcular Los BroadCast edwinsimon Redes 1 22-05-2005 07:50:32
Cliente-Servidor y Broadcast marceloalegre Varios 1 03-05-2005 21:19:32


La franja horaria es GMT +2. Ahora son las 02:51:08.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi