Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > Отловить ошибку


Автор: Marlin 17.3.2006, 05:59
Как отловить ошибку соединения

На клиенте ClientSocket1.Socket.Active:=true и вот если здесь ошибка, как ее отловить?

Я пробывал делать так:

Код


try
ClientSocket1.Socket.Active:=true
except
on E:ESocketError do
    ShowMessage('Ошибка соединения');
end;


Автор: Snowy 17.3.2006, 10:20
Если сокет синхронный, то правильно делаешь.
Если асинхронный.......
С асинхронными сложнее.
Для отлова ошибки соединения придется установить обработчик Application.OnException.
Почему-то ClientSocket.OnSocketError не вызывается. Приходится использовать глобальный отлов.
Можно ставить не навсегда: Перед коннектом ставить, а при коннекте или ошибке снимать.

Автор: Демо 17.3.2006, 10:30
Snowy,

Прекрасно все обрабатывается. Только назовем не асинхронный, а "в неблокирующем режиме"

Код

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    ClientSocket1: TClientSocket;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure ClientSocket1Error(Sender: TObject; Socket: TCustomWinSocket;
      ErrorEvent: TErrorEvent; var ErrorCode: Integer);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  ClientSocket1.Address := '192.1768.0.99';
  ClientSocket1.Port := 80;
  ClientSocket1.Open;
end;

procedure TForm1.ClientSocket1Error(Sender: TObject;
  Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
  var ErrorCode: Integer);
begin
  ShowMessage('Error:'+IntToStr(ErrorCode)+'('+SysErrorMessage(ErrorCode)+')');
  ErrorCode := 0;
end;

end.


Автор: Marlin 17.3.2006, 13:11
Спасибо, я не знал, что ошибку обнулять нужно

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)