用Delphi2010 的Indy 做了一个服务端,和客户端通信正常,但是,有时候客户端关闭的时候,服务端会出现10038 错误,另外,若客户端只是连接上了服务端,而不发送数据,或者发送很少的数据,服务端很少出现10038错误,若发的数据较多,则在客户端断开的时候,会提示10038错误.10038的错误的提示是程序调试的时候出现的,单独执行服务端,不出现。请问有什么影响吗?如何解决错误?

解决方案 »

  1.   

    10038的错误是“在一个非套接字上面尝试了一个操作”是不是你的indy的断开处理和收发数据是异步的原因。
      

  2.   

    fang098 说得对。发送数据是由一个单独线程操作。如果数据比较多,还没发完你就把连接断开,就会出现这样的错误。这里应该有个 Mutex 互斥对象来实现同步。断开连接之前调用 wait 函数等在那里,直到 Mutex 被释放才能继续。Mutex 的释放由发送线程来执行。