如何正确捕获服务器的初始响应

How to properly catch the initial response of a server?

本文关键字:响应 服务器 何正确      更新时间:2023-10-16

我的C++程序正在尝试检查ftp服务器的状态。它使用 winsock 和简单的测试函数,如下所示(伪代码):

create a tcp socket
connect to port 21 of the server
do recv() while data is available
close socket
return received data

它不会使用 send() 向服务器发送任何数据 - 只是尝试捕获服务器的初始响应。这实际上有效并返回"200 响应服务器就绪" - 这正是我所需要的。但是在第二次运行同一函数后(第一次运行后立即),它不返回任何内容(因为 recv() 返回 -1)。Wireshark告诉我服务器真的没有发送响应。之后,我在测试函数调用之间暂停了半秒钟,现在它可以工作了,但这个解决方案是不需要的。问题是:如何正确捕获服务器的初始响应(不仅是ftp,还有其他任何响应)?

我认为你不需要抓住服务器的答案。如果您的程序连接到某个端口,则某个服务器侦听此端口并且正常。因此,只需打开连接并检查套接字变量。

PS:很多服务器在你向它们发送数据之前什么都不做(不确定FTP),你必须发送一些东西才能得到答案。但是要有状态成功的完整连接就足够了。