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

标签 c# sockets ftp

当 .NET Framework 1.0 发布时,没有适用于 .NET 的良好 FTP 客户端实现,所以我使用 System.Net.Socket 编写了自己的实现。最近我不得不对其进行一些更改,在调试时我注意到关闭连接时我正在针对 (WinXP SP 2) 测试的 IIS 5.1 FTP 服务器的输出出现乱码。

通信是这样的:

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

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

此字节序列与此服务器一致,我想知道这是否可以预料/可以避免,或者我是否应该简单地“快速修复”它,将其添加到我的“MS FTP 服务器怪癖”列表中。

最佳答案

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

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

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

关于c# - 从 IIS 5.1 FTP 服务器返回意外的字节序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1900585/

相关文章:

c# - 需要帮助追踪一个奇怪问题的起源

javascript - C# Selenium 访问浏览器日志

c++ - 是否存在任何统一函数而不是 htons htonl

C++ 套接字编程 TCP/IP 套接字缓冲区的最大大小?

sockets - 节省带宽 GPRS 和 TCP

asp.net-mvc - 当我们在 Visual Studio 中进行 FTP 发布时,将为 Controller 创建哪个 dll

c# 排序中的委托(delegate)是什么

C# PrintQueue AddJob printingHandle 抛出空异常

php - 如何使用 cUrl、ssl 创建目录?

wordpress - 使用 Gulp 更新的 Gulp Vinyl FTP 没有注意到文件的变化,因此没有部署更新 : TIME ZONE ISSUE