即使我使用try..except,也会收到异步套接字错误10049

时间:2010-08-01 16:09:17

标签: delphi sockets exception-handling try-finally tclientsock

当我运行我的程序(在调试器/ ide之外)我得到错误异步套接字错误10049,我不应该收到消息dialoge:''错误''?看下面的代码

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

我做错了什么?

2 个答案:

答案 0 :(得分:4)

你应该做的是处理TClientSocket的Error事件,因为这是你能够捕获套接字错误的地方。

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;

我希望这会有所帮助

Gaetan Siry

答案 1 :(得分:-1)

TClientsocket组件(已经deprecated for a while)使用异步通信模型,因此可能不会在Open方法中抛出异常,而是在消息/事件处理方法中抛出异常接收传入的数据。

更新:我可以使用Delphi 6和给定代码重现这一点,如果我输入的无效IP地址如1.2.3.4

要修复它,我会转移到像Indy或Ararat Synapse这样的TCP / IP库(两者都有一个通用的TCP客户端组件)。