我的 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,还有其他)的初始响应?