получить ошибку асинхронного сокета 10049, даже если я использую try..except - PullRequest
3 голосов
/ 01 августа 2010

когда я запускаю свою программу (вне отладчика / ide), я получаю сообщение об ошибке асинхронного сокета 10049, я не должен получать сообщение: «ошибка»?см. мой код ниже

begin
    try
       ClientSocket1.open;
    except
       showmessage('error');
    end;
end;

что я делаю не так?

Ответы [ 2 ]

4 голосов
/ 01 августа 2010

Что вам нужно сделать, это обработать событие Error TClientSocket, потому что именно здесь вы сможете фиксировать ошибки вашего сокета.

Параметр ErrorCode - это код ошибки WinSock. Если вы хотите отключить Error, вы можете установить ErrorCode на 0, что предотвратит выдачу исключения, и после этого вы сможете определить, что это за ошибка, и обработать ее так, как вы хотите

procedure TForm1.ClientSocket1Error(Sender: TObject;
  Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
  var ErrorCode: Integer);
var error : Integer; 
begin

   error := ErrorCode; {prevent exception from being thrown}

   ErrorCode := 0;

   if error = 10049 then
     showmessage('asynchronous socket error');
.
.
.


end;

Надеюсь, это поможет

Гаэтан Сири

0 голосов
/ 01 августа 2010

Компонент TClientsocket (который устарел уже некоторое время ) использует модель асинхронной связи, поэтому возможно, что исключение выдается не в методе Open, а вметод обработки сообщений / событий, который получает входящие данные.

обновление: я могу воспроизвести это с Delphi 6 и данным кодом, если я введу неверный IP-адрес, такой как 1.2.3.4

Исправитья бы перешел в библиотеку TCP / IP, такую ​​как Indy или Ararat Synapse (оба имеют общий клиентский компонент TCP).

...