当我运行我的程序(在调试器/ ide之外)我得到错误异步套接字错误10049,我不应该收到消息dialoge:''错误''?看下面的代码
begin
try
ClientSocket1.open;
except
showmessage('error');
end;
end;
我做错了什么?
答案 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客户端组件)。