3

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

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

我究竟做错了什么?

4

2 回答 2

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;

我希望这有帮助

盖坦·西里

于 2010-08-01T19:59:57.440 回答
-1

TClientsocket 组件(已弃用 一段时间)使用异步通信模型,因此可能不是在 Open 方法中引发异常,而是在接收传入数据的消息/事件处理方法中引发异常。

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

为了解决这个问题,我会转移到像 Indy 或Ararat Synapse这样的 TCP/IP 库(两者都有一个通用的 TCP 客户端组件)。

于 2010-08-01T17:00:15.550 回答