代码之家  ›  专栏  ›  技术社区  ›  Omair Iqbal

获取异步套接字错误10049,即使我使用Try..

  •  3
  • Omair Iqbal  · 技术社区  · 16 年前

    当我运行我的程序(在调试器/IDE之外)时,我会得到错误异步套接字错误10049,难道我不应该收到一个消息对话框:“错误”?请参阅下面的代码

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

    我做错什么了?

    2 回复  |  直到 16 年前
        1
  •  4
  •   G-Man    16 年前

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

    error code参数将具有winsock错误代码。 如果您想消除错误,可以将错误代码设置为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;
    

    我希望这有帮助

    盖坦斯里

        2
  •  -1
  •   mjn anonym    16 年前

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

    更新:如果我输入了一个无效的IP地址,比如1.2.3.4,我可以用Delphi6和给定的代码来复制它。

    要修复它,我将移动到一个TCP/IP库,如indy或 Ararat Synapse (两者都有一个通用的TCP客户端组件)。

    推荐文章