问题1,请问CLIENTSOCKET和SERVERSOCKET能设置超时时间吗?
问题2,请问经常CLIENTSOCKET非正常中断连接,这个时候SERVERSOCKET就会弹出一个对话框报告错误和错误的代码,请问能否禁止这个对话框的出现而改用自己的异常处理??

解决方案 »

  1.   

    问题2:在clientsocket的error事件里做你的处理。
      

  2.   

    问题2:出错时会触发OnError事件,你可以在里面处理异常,里面有个ErrorCode参数就是错误代码,处理完之后令ErrorCode:=0;就可以避免默认的消息框弹出。
    问题1:不行,但是你可以通过别的方法来缩短或延长超时时间,比如用Timer来计时,然后自己处理一下10060错误。
      

  3.   

    当然你也可以在主窗体上放个ApplicationEvents控件,在他的OnException中写上自己的异常处理,这样你就可以把整个程序的所有异常都用自己希望的作
    procedure TFMain.ApplicationEvents1Exception(Sender: TObject;
      E: Exception);
    begin
          application.onexception:=AppException;end;procedure TFMain.AppException(Sender: TObject; E: Exception);
    begin
        //自己的异常处理。
    end;
      

  4.   

    SERVERSOCKET
    10053错误要如何避免,这个对话框始终去不掉
      

  5.   

    procedure TForm1.ServerSocket1ClientError(Sender: TObject;
      Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
      var ErrorCode: Integer);
    begin
      Socket.Close;
      ErrorCode:=0;
    end;
      

  6.   

    不可以,客户端非正常关闭后服务端仍然弹出这个对话框,我把断点设置在服务端的ERROR事件里面,出错的时候并未端到,估计不是这个原因引起的.
      

  7.   

    你ServerSocket控件的ServerType属性是stNonBlocking吗?
      

  8.   

    我也觉的奇怪,我有在ERROR事件里写入一个记录错误日志的过程,发生错误的会执行记录到这个错误,但是没有办法断点到这里分析,实在不行我只能用OLYDBG跟踪进去分析了.不知道会不会和我的数据加密方式不同有关系
      

  9.   

    我建议你先写两个测试程序,一个server一个client,然后测试一下onerror事件的触发情况,然后再在你的程序里面找问题。