如何在clientsocket中捕获网络异常?在线等待求解,不够加分阿.(50分)

  • 主题发起人 主题发起人 tongdings
  • 开始时间 开始时间
T

tongdings

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure TFrmPublic.cSocketError(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
//WSAGetLastError;
//ErrorCode := 0;
showmessage(IntTostr(ErrorCode));
case ErrorCode of
10050: //ENETDOWN
self.ReSendData;
10058: //ESHUTDOWN
MessageDlg('网络断开时发生错误!',mtError,[mbOK],0);
10060: //ETIMEDOUT
self.ReSendData;
10061: //ECONNREFUSED
self.ReSendData;
10064: //EHOSTDOWN
MessageDlg('DVR主机异常断开!',mtError,[mbOK],0);
10091: //由 WSAStartup()函数返回,表明底层的网络子系统无法使用。
MessageDlg('底层的网络子系统无法使用!',mtError,[mbOK],0);
11001: //HOST_NO_FOUND
MessageDlg('无法找到所连接的主机!',mtError,[mbOK],0);
11004: //NO DATA
MessageDlg('No Data!',mtError,[mbOK],0);
end;
end;
 
你不是做得很好嘛!
是不是想更多的错误码。
 
我的意思是想屏蔽异常.这样做还是屏蔽不了阿.
比如ESocketError什么的.
指教了
 
处理完后要执行:ErrorCode := 0;否则系统的错误总会出现:)
 
就是,你知道//ErrorCode := 0;
可是把它注释掉了;
其实,如果想什么也不显示,那么可以直接用你的注释的两句,其他的都不要;

另外,你最好去掉 showmessage(IntTostr(ErrorCode));
太多的提示用户会烦的,实在想要,可以整合到 MessageDlg 中去!
 
to::chenxz, and 魏启明
多谢你们的解答。已接受你们的答案了。
现在还有个问题就是怎么用try...except或者try...catch之类的屏蔽呢?
附:showmessage(IntTostr(ErrorCode));
当然不能给客户看到,那是当然的。这是上次搞的测试。
谢谢魏兄
 
我只想证明这个能不能用普通的异常处理方式进行处理,请大家不要误会。
这不是钻什么牛角尖阿。
 
你可以按以下的方法試試:
Try
......(你打算在甚麼條件時捕捉錯誤)
Except
on MyError:EConventError do
showmessage('異常的 ClassName 是'+MyError.className+#10#13
+'異常的 Message 是'+MyError.Message);


 
多人接受答案了。
 
后退
顶部