代码之家  ›  专栏  ›  技术社区  ›  EventHorizon

从IIS 5.1 FTP服务器返回意外的字节序列

  •  4
  • EventHorizon  · 技术社区  · 15 年前

    沟通是这样的:

    Send: QUIT<CRLF>
    Receive: 221<CRLF><NUL>?<ETX><NUL>
    (socket closed)
    

    FTP命令通道处理程序使用CRLF作为终止符面向行,在收到第一个CRLF后的四个字节时,它会等待第二个CRLF,从而导致超时错误。整个序列由一个套接字读取操作返回,我已经验证了从套接字返回的字节数是正确的。

    1 回复  |  直到 15 年前
        1
  •  1
  •   Andy Jacobs    15 年前

    虽然不是很理想,但看起来FTP服务器返回了正确的响应,紧接着是意外的结果。如果我在设计这个类,我会让它保留一个未报告文本的缓冲区(你可能已经有了,以防你一次读不到一整行),当调用函数返回一行文本时,让它去掉并在CRLF之前返回内容,剩下的留给下一个函数——只有在没有完整的行返回时才让它等待更多。

    这应该可以解决上述情况。您的函数足够返回“221”,调用者会将其解释为成功,调用者不会要求更多,这将阻止最后的等待。

    或者,或者另外:如果函数可以检测到套接字关闭(因为您的帖子在发送响应后使它看起来像是来自远程站点),那么在这种情况下,它也可以防止等待。