当scktsrvr关闭了,客户端就会死机,关也关不掉,如何能够捕获这个异常呢?
当客户端与服务端在同一台机器上,打开程序后,重启机器都不能.....
服务端如何获取客户端的连接的机器名呢??
先谢谢了!!

解决方案 »

  1.   

    1、让客户端把机器名称主动告诉服务端
    2、scktsrvr关闭后,客户端要过段时间才能返回错误
      

  2.   

    在客户端加一个AppEvent事件异常抛出机制。可以获取到客户端与服务器断开的异常,然后做自己想做的处理就可以了。
      

  3.   


    请问具体应该怎么做?在服务器写函数吗?当scktsrvr关闭后就什么都不可以做了啊!!
      

  4.   

    我的办法是把连接部分的代码放入一个线程(TThread )中,然后使用WairForSingleObject(yourThread.Handle, waitTime)等待连接结果的返回。
    多线程的好处就是主线程的执行绝对不会受到影响。
      

  5.   

    在Additional组件页里面找一下TApplicationEvents组件,然后在他的OnException事件里面进行异常处理,你调试一下看看都出现什么异常,然后做相应的处理就可以了
      

  6.   


    Windows socket error: 远程主机强迫关闭了一个现有的连接.  10054 On API 'recv' 的异常名是什么啊?(E is ESocketConnectionError) or (E is ESocketError) 都不对有谁能告诉我是什么不?
      

  7.   

    if E.Message='错误信息' then
      

  8.   

    错误是ESocketError,但是异常是从线程抛出来的.最好的办法是在TSocketConnection的窗体当中过去掉THREAD_EXCEPTION这个消息.
      

  9.   


    那是不是要改Delphi TSocketConnection的程序?我刚在网上找到了是这两个东西(E is ECONNRESET)  WSAECONNRESET
    但我用不了,不知道要USE什么?
      

  10.   

    你找的这个错误号并没有太多的用处.对于这个象死机一样的暂时停顿,实际上是一个处理机制上的问题.TSocketConnection在发送出一个请求等待服务端应答的过程当中使用的是一个GetMessage阻塞,这个阻塞当中仅对相关的几个消息做出处理,其它任何消息都不起作用.而当服务器端被强制关闭之后,网络出现异常断开的现象,客户端要检测到断开,需要相当长的时间.这个几乎是无法避免的.
      

  11.   

    在这个处理当中,如果直接把数据控件,如DBGrid之类的与ClientDataSet关联,那么这个问题就是难以避免的.远程访问当中网络异常几乎是无法避免的.在更多的时候,处理的建议是将相关的网络调用等待过程置于线程当中.