如何捕捉“Error reading from socket”异常? ( 积分: 300 )

  • 主题发起人 主题发起人 canna
  • 开始时间 开始时间
C

canna

Unregistered / Unconfirmed
GUEST, unregistred user!
当borland socket server中断时,socket客户端会出现“Error reading from socket”
异常。如何捕捉该异常,并给出中文提示?
谢谢!
 
当borland socket server中断时,socket客户端会出现“Error reading from socket”
异常。如何捕捉该异常,并给出中文提示?
谢谢!
 
GetLastError
 
非法套接字
 
能详细说明吗? 谢谢
 
OnError事件里面有个ErrCode,每个Code针对一种错误,解析一下就行了,结束事件处理时把ErrCode:=0;就不会有异常出来了。
 
你好,jennykiller
是哪个OnError事件?
 
在源代码中搜索"Error reading from socket"->得到一个字符串名称->搜索字符串名称->得到异常名称->搜索异常名称->得到抛出异常位置->理顺调用关系,查找异常处理步骤
其实最好的方法是使用Delphi调试客户端,然后人为造成错误,然后跟踪代码,可以很容易的找到空间对外提供的错误处理接口
 
你好,zjan521
与borland socket sever相关的pas文件,我都搜索过了,甚至delphi的一些存储
基本异常字符串的pas都搜索过了,没有找到
"Error reading from socket"字符串
该异常容易生成:在socket客户端运行时,关闭其app server,该客户端即出现该
异常提示。此时,如何跟踪代码,找到错误处理接口呢?
 
这是一个异步错误问题,用TRY EXCEPT 都捕捉不了的。我碰到过,我是这样捕捉的:
1、窗体初始化时加入:
application.OnException:=Appexception;
2、然后在程序中加入
procedure Tform1.AppException(Sender: TObject;
E: Exception);
begin
if sender is TSocketConnection then

begin
//捕捉到了
end;

end;
 
labixiaoxin,我想问一下application.OnException:=Appexception;是在哪个事件里面加入?我写道FormCreate当中去还是无法捕捉到异常。
 
"Error reading from socket"也可能是Format的系统错误信息,因此可能找不到。
我的建议,还是跟踪一下,可惜身边没有环境。
你可以首先确定此异常的类名,这个很简单,没必要死盯那个字符串.然后可以搜索找出抛出异常的位置
 
  在系统的工程文件里面加入labixiaoxin那些代码,交系统的错误处理交给另外一个处理程序来处理所有的错误。
 
to l1_jun:
"交系统的错误处理交给另外一个处理程序来处理所有的错误"
那是否要维护一个庞大的错误处理程序来处理所有的异常??
 
//来自:canna, 时间:2005-7-29 18:00:59, ID:3150630
//to l1_jun:
这是万不得已的最后法宝,或者是暂时的调试手段.
一个问题来了,那么可能有几种解决方案?每种解决方案需要什么条件?这些解决方案权衡利弊,那个优先级最高?然后你就根据优先级逐个尝试解决方案,就这样.不要太死板了.
比如就你的当前问题而言.
解决方案:
NO1.控件的事件响应,也就是在错误发生之后,但是抛出异常之前.
条件:空间作者的错误处理已经覆盖了此错误,并提供了相应的接口
附加:这是优先级最高的解决方案.如果在抛出异常之后拦截,那么系统地执行路线已经改,这意味着失去了一些机会和可能性.
.........
NO.LAST:在*.dpr当中添加代码,过滤Application的所有异常/或者ApplicationEvent控件的事件响应也可以.
你的步骤应该是
1.确认异常的类名称
2.定位异常抛出的位置
3.找出导致异常抛出的原因
4.察看在错误发生和异常抛出之中又没有合适的错误处理接口可以利用.
5......
太累了
 
以前我也遇到过,告诉你个简单方法,在客户端窗体上加个Additional组件页上的ApplicationEvents组件,然后在 ONException 事件中加上判断,找到Exception的Message信息即可。
呵呵。保管好用。[:D][8D]
 
谢谢cuifeng,谢谢各位!
 
接受答案了.
 
后退
顶部