Delphi 如何检测服务器是否使用TIdTCPClient响应请求?

Delphi 如何检测服务器是否使用TIdTCPClient响应请求?,delphi,tcpclient,indy,Delphi,Tcpclient,Indy,我想知道是否有一种方法可以通过ping或发送一个空请求来查看delphi中TIdTCPClient的给定服务器的响应(以及响应时间)-我尝试的是: TCPClient := TIdTCPClient.Create(nil); responseStream := TMemoryStream.Create; TCPClient.Host := someHost; TCPClient.Port := somePort; TCPClient.Connect; startTime := Ticks; TC

我想知道是否有一种方法可以通过ping或发送一个空请求来查看delphi中
TIdTCPClient
的给定服务器的响应(以及响应时间)-我尝试的是:

TCPClient := TIdTCPClient.Create(nil);
responseStream := TMemoryStream.Create;
TCPClient.Host := someHost;
TCPClient.Port := somePort;
TCPClient.Connect;
startTime := Ticks;
TCPClient.IOHandler.ReadStream(responseStream, -1, True);
respTime := GetTickDiff(startTime, Ticks);
TCPClient.Disconnect;

在这个伪代码中,我成功连接到someHost:somePort,但显然我没有正确使用
TCPClient.IOHandler.ReadStream
-有人能帮我修复代码吗(我真的必须使用
tidtcplient
)或者演示如何替换工作不正常的行?

TCP中没有空请求(UDP中没有空请求)。如果要向TCP服务器发送请求,请求中必须包含一些数据。此外,您连接到的特定类型的服务器决定了您可以向其发送的请求的类型,您不能只连接并发送您想要的任何内容(当然,您可以,但这并不保证您会得到响应)

按照代码当前的工作方式,它只能从向客户端发送初始问候语的服务器读取数据。大多数服务器不这样做。从给定服务器获取响应的能力取决于该服务器实现的特定协议(HTTP vs FTP vs POP3 vs SMTP vs IMAP vs…),因为该协议决定了请求和响应的工作方式


因此,就你的问题而言,它是不可回答的,因为它太笼统了,有太多的可能性。你需要缩小范围。

为什么你认为你没有正确使用它?发生了什么,您希望发生什么?@Rob在第行
TCPClient.IOHandler.ReadStream(responseStream,-1,True)AReadUntilDisconnect=True
以便
ReadStream()
将保留读取的数据,直到服务器关闭连接。我也这么想,但我希望每种类型的服务器都能以某种方式响应indy的一个库客户端。现在我确信这取决于服务器处理请求的方式——再次感谢您的详细回答(Remy:)