在Delphi 10中检查客户端到TIdTCPServer的连接质量

在Delphi 10中检查客户端到TIdTCPServer的连接质量,delphi,networking,indy10,Delphi,Networking,Indy10,使用delphi10,我有一个TIdTCPServer,它接收来自不同客户端的连接,一些是Windows客户端,另一些是移动客户端(iOS和Android) 是否有办法确定Indy TCP服务器和连接到该服务器的Indy TCP客户端之间的连接质量 我尝试使用TIdICMPClient,但问题是一些Windows客户端使用防火墙阻止ping 我应该为要发布的问题指定一个代码。。所以 function Testquality: boolean; begin IdIcmpClient1.Rece

使用delphi10,我有一个
TIdTCPServer
,它接收来自不同客户端的连接,一些是Windows客户端,另一些是移动客户端(iOS和Android)

是否有办法确定Indy TCP服务器和连接到该服务器的Indy TCP客户端之间的连接质量

我尝试使用
TIdICMPClient
,但问题是一些Windows客户端使用防火墙阻止ping

我应该为要发布的问题指定一个代码。。所以

function Testquality: boolean;
begin
  IdIcmpClient1.ReceiveTimeout := 500;
  IdIcmpClient1.Host := host;
  IdIcmpclient1.OnReply := PingReply;
  IdIcmpClient1.Ping;
  Result := IdIcmpClient1.ReplyStatus.ReplyStatusType <> rsTimeout;
end;
函数Testquality:boolean;
开始
IDICMPClient 1.ReceiveTimeout:=500;
IDICMPClient 1.Host:=主机;
IDICMPClient 1.OnReply:=PingReply;
IdIcmpClient1.Ping;
结果:=IdIcmpClient1.ReplyStatus.ReplyStatusType rsTimeout;
结束;

您到底想要什么样的“连接质量”?您已经建立了TCP连接,没有必要求助于ICMP。如果您想知道客户端是否仍然处于活动状态且响应良好,请让服务器在每个连接上发送一个命令,并要求客户端发送一个响应(反之亦然,让每个客户端发送服务器响应的命令)。定期执行此操作,并让服务器关闭任何没有响应(或没有足够频繁地发送命令)的连接。如果你的应用程序没有这个选项,至少启用TCP级别的keepalives。雷米谢谢你的回答。。我需要,在一个酒吧规模(1酒吧,2或3酒吧,良好的连接速度)表示每个连接的客户端的链接质量。。就像在icmp中一样,300毫秒的结果被视为高ping(低互联网),40-100毫秒的结果被视为公平ping。。你明白了吗?,TCP里没有这样的东西。你所能做的就是向另一端发送一个命令,并记录响应所需的时间,重复几次并平均持续时间。有人给了我一个主意。。让客户端ping服务器并将结果发送回服务器。。这样做是合理的。。你不认为吗?正如你前面所说,ICMP ping可以被阻止,因此让客户端尝试确定并向服务器报告自己的状态没有多大意义。您确实需要在TCP通信协议本身内部处理此问题。让服务器发送自己的
PING
类命令供客户端响应。或者让客户端发送自己的
PING
类命令,以便服务器响应。不管怎样,这都允许客户端和服务器检查另一方是否仍然活着,并查看其响应能力。