如何检测服务器是否正在响应TIdTCPClient的请求?

时间:2014-05-23 18:04:11

标签: delphi tcpclient indy

我想知道是否有办法以某种方式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 - 有人可以帮我修复我的代码(我真的必须使用TIdTCPClient)或告诉我如何替换不能正常工作的线路?

1 个答案:

答案 0 :(得分:1)

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

您的代码目前的工作方式,它只能从向客户端发送初始问候语的服务器中读取数据。大多数服务器都不这样做。您从给定服务器获取响应的能力取决于该服务器实现的特定协议(HTTP与FTP对比POP3对SMTP与IMAP对...),因为它是指示请求和响应如何工作的协议。 p>

因此,当你的问题出现时,它无法回答,因为它过于通用,有太多的可能性。你需要缩小范围。