socket的一个奇怪问题?(50分)

  • 主题发起人 主题发起人 ohywm
  • 开始时间 开始时间
O

ohywm

Unregistered / Unconfirmed
GUEST, unregistred user!
我在TClientSocket控件的onerror事件中定义了出错处理
例如:
Case ErrorCode Of
11001:edit1.text :='出现错误!.';
end;
ErrorCode:=0;
然后我把它的host属性随便设了个值,比如'122.1',然后就开始连接!
但是运行结果是弹出一个对话框,写道“Windows socket error:不知道这样的主机.....“
后面我不写了,请问各位大虾,为何没有转到onerror事件处理,而弹出这个对话框??
如何不让弹出该对话框,而让程序走自己写的出错流程呢???
 
建议你跟踪程序,看看有没有进入错误处理程序。
比较保险的方法是,使用try...Catch进行错误防护。
 
我已经把active=true放在try...except中了
可还是没有用,照样弹出那个Windows socket error:不知道这样的主机.....“
对话框:(((
 
onerror事件捕获不到主机地址错误。
 
那为什么try...except...也捕捉不到呢?
那要如何才能捕捉的到?
 
是这样的,你必须把SOCKET的工作方式设置为异步工作才行!
 
是这样的,你必须把SOCKET的工作方式设置为异步工作才行!
因为同步方式下在建立连接过程中根本不会触发ONERROR事件!
 
会触发的
因为只要我的host符合格式,比如“12.1.17.1”那么就可以触发那个事件
问题的关键是,如果输入"1.2"这样不符合格式的地址,那么就无法触发该事件!!!
 
ohywm:我的程序和你的有共通点,昨天刚解决了事件捕获的问题,刚开始有的时候能捕获,
有的时候不行。
1、捕获客户端异常 errorcode=10053
我在服务端的onclienterror事件里添了几句客户端异常清除listview保存信息的代码,然后
再用 if errorcode=10053 then
showmessage('客户端异常退出');
errorcode:=0;
然后就OK了。(我也不知道是怎么回事)
2、IP地址错误
连接类型都设为ctNonBlocking ,把clientsocket1的IP设为218.,然后连接。
在onerror事件里用 if errorcode=10049 then
showmessage('Ip error');
errorcode:=0;
能正常捕获错误.
 
By the way:
我使用TClientSocket的onError
每次错误的时候都要把该前的过程运行完然后再执行onError
那么我的过程中如何知道是否出错了呢?
:)[:D][:D][:D][:D][:D][:D][:D][:D][:D][:D]
 
请不要在调试期运行程序,调试期的异常捕获不起作用。
你可以关闭delphi后单独运行生成的exe。
 
你可以定义一个过程来捕获例外,出错时候就让它执行
TPubErrHandle = class(TObject)
public
procedure handException(Sender: TObject;
E: Exception);
//自己随便写,空函数也行
end;
在FormCreate中加入这些代码
Var
PubErrHandle:TPubErrHandle;
begin
PubErrHandle := TPubErrHandle.Create ;
Application.OnException := PubErrHandle.handException;
end
 
后退
顶部