【问题标题】:FTP: When to send the code 226 after initiating a file transfer?FTP:启动文件传输后何时发送代码 226?
【发布时间】: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 - 我不明白。哪一个是正确答案?请建议

标签: java sockets ftp


【解决方案1】:

肯定不要延迟,我唯一能想到的是你构建一个代理层来拦截确认代码,检查文件,并将代码重新路由到应用程序,有点像 Telerik fiddler作为应用程序。

在将消息传递到服务器时,我在 JMS 确认模式中使用了相同的概念,我必须实现相同的概念。

祝你好运我的朋友

【讨论】:

  • @Mahmoud,谢谢。有没有办法可以在 Java 中拦截 TCP 消息?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多