【发布时间】:2014-03-20 08:30:11
【问题描述】:
从 FTP 服务器的角度来看,如果客户端通过 RETR 命令请求文件,服务器会通过指定端口创建到客户端的数据连接(套接字),并通过写入输出流开始传输。服务器以这样的方式编码(JAVA),在套接字中写入完成后,输出流被刷新,然后套接字关闭。在此之后代码“226”被发送到控制通道中的客户端。
由于连接是通过非常慢的网络进行的,因此 226 消息在实际数据传输完成之前到达。这是一个棘手的情况,客户端代码无法更改,服务器必须确保在客户端收到数据后发送 226。
我尝试在互联网上搜索并获得很少的输入,但不确定哪个是标准。 1. 使用 setSoLinger() 方法开启 SO_LINGER 并设置超时。 2. 在将每个字节写入套接字后引入延迟(快速连接会影响性能)。
除了上述之外,还有其他选择可以解决这种情况吗?关于在 Linux/Solaris/Windows FTP 服务器中发送 226 所遵循的标准的任何想法。
我可以在 stackoverflow 中看到类似的线程“何时应从 FTP 服务器发送 226?” ,但找不到与我的问题相关的太多信息。
非常感谢您的帮助...谢谢
【问题讨论】:
-
使用Linger是标准操作,添加延迟不是专业的方法,可能会导致系统变慢。
-
为什么除了正确答案之外还需要其他选项?
-
@EJP - 我不明白。哪一个是正确答案?请建议