场景:
Delphi2010运行svn-trunk的最新Indy版本。
我有一个使用idHTTP发送http请求的应用程序。这个idHTTP只创建一次,并且在应用程序运行期间一直保存在内存中。我向同一个http服务器(这也是我开发的一个应用程序(发送了很多web请求。
我正在使用keep-alive来保持套接字的连接。
在几次请求之后,我在客户端得到了一个EIdConnClosedGracefully
,无论我在得到这个异常之后做什么,对同一服务器的每个后续请求都会生成相同的异常。
我尝试断开连接,关闭套接字,清除IOHandler缓冲区,但都没有成功。
如果我销毁IdHttp对象并在异常发生后重新创建它,那么一切都会正常工作。但这不是我想要的,因为我需要一直连接到服务器(以避免time_WAITS等(。
有人知道如何在客户端处理EIdConnClosedGracefully
异常,并在该异常发生后使idHttp工作吗?
编辑
我自己开发了网络服务器,我确信不会在客户端请求后断开连接。我知道这个异常是可以的,,但不可以的是套接字在那之后变得不可用。Indy应该从这个异常中恢复,断开插座并在需要时重新连接。正如我所说,这个异常不仅在Delphis IDE上显示给用户。我真正需要的是在得到这个异常之后,我必须能够继续使用这个套接字
您只需要调用TIdHTTP.Disconnect(False)
和TIdHTTP.IOHandler.InputBuffer.Clear()
即可恢复。