- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有一个使用 idHttpServer 开发的网络服务器应用程序。当客户端连接我的网络服务器时,由于某种未知原因断开连接(不是正常断开连接),我的网络服务器没有收到通知。我知道这是正常行为,但我需要知道客户端何时死亡。
有几种方法可以做到这一点。我知道 2 个好方法:
1 - 实现心跳机制。客户端套接字通知服务器它仍然存在(需要一些工作和一些代码才能使其工作)
2 - TCP Keep Alive .这是我最喜欢的方式,因为它不需要太多的代码和工作。但我对此有一些疑问。
编辑
我正在使用 Delphi 2010 和来自他们 svn 的最新 Indy10 源代码。
最佳答案
如果您使用的是最新的 Indy 10 版本,那么您可以使用 TIdSocketHandle.SetKeepAliveValues()
方法:
procedure SetKeepAliveValues(const AEnabled: Boolean; const ATimeMS, AInterval: Integer);
例如:
procedure TForm1.IdHTTPServer1Connect(AContext: TIdContext);
begin
// send a keep-alive every 1 second after
// 5 seconds of inactivity has been detected
AContext.Binding.SetKeepAliveValues(True, 5000, 1000);
end;
请注意,ATimeMS
和AInterval
参数仅在 Win2K 及更高版本上受支持。
否则,直接使用TIdSocketHandle.SetSockOpt()
方法手动启用TCP/IP SO_KEEPALIVE
选项:
procedure TIdSocketHandle.SetSockOpt(ALevel: TIdSocketOptionLevel; AOptName: TIdSocketOption; AOptVal: Integer);
例如:
procedure TForm1.IdHTTPServer1Connect(AContext: TIdContext);
begin
AContext.Binding.SetSockOpt(Id_SOL_SOCKET, Id_SO_KEEPALIVE, 1);
end;
关于delphi - idHttpServer(服务器)和 wininet(客户端)上的 TCP Keep Alive,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5883441/
我知道我之前发布过类似的问题,但我无法让它工作,我有这个简单的代码: procedure TfrmMain.srvrConnect(AContext: TIdContext); //idhttpser
idHttpServer OnCommandGet 是否在线程内运行?我猜 Indy 创建了一个线程并在其中调用此事件,但我对此不太确定。 Indy 做到了这一点,可以在此事件中设置一个 thread
拥有 idHTTPServer 并希望它停止接收请求。这样做的正确方法是什么? 我不确定下面的代码 function TRPSystem.CloseAllConnections: boolean; v
当 idHttpServer 断开连接时是否会触发任何事件? 我所说的断开连接并不是指客户端断开连接,而是指 idHTTPServer 由于某种原因断开连接。 我可以更好地解释它:当 idHTTPSe
我还不太会用 delphi,但是根据一些示例,我已经设法创建了不超过 10 个用户的简单 http 服务器。 有两个主要问题我还不知道如何解决。 验证、管理用户的正确方法 - session 主要问题
我使用的是 Delphi 2006 和 Indy 10。我创建了一个表单并下拉了一个 IdHttpServer 组件。我为表单创建一个 OnCreate 事件以将服务器设置为事件状态,并为服务器的 O
我正在为基于平板电脑的 HTML 客户端编写基于 Delphi 的 Windows 服务器。 大多数文件都是未经处理的,就像您对 Web 服务器的期望一样,但少数特殊关键字被解释为与服务器上其他软件交
我必须在我们的应用程序中创建一个嵌入式 HTTP 服务器。这必须创建用于进程间通信,因为另一端只能调用 WebService。 我们不需要一次处理更多请求,但我必须从主线程使用库和数据库连接。 Del
我正在使用 indy 在 delphi 10.3 中开发一个支持 SSL 的 MITM 代理。我使用 IdHttpServer 组件,它在 CommandOther 事件中起作用。我设法让它即时解密和
我有一个使用 idHttpServer 开发的网络服务器应用程序。当客户端连接我的网络服务器时,由于某种未知原因断开连接(不是正常断开连接),我的网络服务器没有收到通知。我知道这是正常行为,但我需要知
当 TIdContext.Connection 触发 OnWorkEnd 事件时,可以从 TIdTCPConnection 检索一些信息(用于记录目的)吗? 我想要以下信息: - 用户ip地址(在So
我是一名优秀的程序员,十分优秀!