java - FTP:启动文件传输后何时发送代码 226?

标签 java sockets ftp

从FTP服务器的角度来看,如果客户端通过RETR命令请求文件,服务器会通过指定端口创建到客户端的数据连接(套接字),并通过写入输出流开始传输。服务器的编码方式(JAVA)是这样的:在套接字中完成写入后,刷新输出流,然后关闭套接字。此后代码“226”被发送到控制 channel 中的客户端。

由于连接是通过非常慢的网络进行的,因此 226 消息在实际数据传输完成之前就到达了。这是一个棘手的情况,客户端代码无法更改,服务器必须确保客户端收到数据后发送 226。

我尝试在互联网上搜索,但得到的信息很少,但不确定哪一个是标准。 1. 使用setSoLinger()方法打开SO_LINGER并设置超时。 2. 在将每个字节写入套接字后引入延迟(快速连接会影响性能)。

除了上述之外还有其他办法可以解决这个问题吗?关于在 Linux/Solaris/Windows FTP 服务器中发送 226 所遵循的标准的任何想法。

我可以在 stackoverflow 中看到类似的线程“何时应该从 FTP 服务器发送 226?” ,但无法从中找到与我的问题相关的太多信息。

非常感谢这里的帮助...谢谢

最佳答案

不要接受延迟,我唯一能想到的是构建一个代理层来拦截确认代码,检查文件并将代码重新路由到应用程序,就像 telerik fiddler 作为应用程序所做的那样。

与我之前在向服务器传递消息时使用 JMS 确认模式相同的概念,我必须实现相同的概念。

祝你一切顺利,我的 friend

关于java - FTP:启动文件传输后何时发送代码 226?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22527333/

相关文章:

java - 运输基准的不同结果

java - 为什么我的 Java 循环在第一次迭代时跳过第一个用户输入?

java - 使用 ThreadPoolExecutor 检查服务器端口是否打开时,Android 应用程序挂起并显示黑屏 5-6 秒

java - 发送/接收数据出现问题

bash - 通过 Cron 作业上传当天的备份而不是所有文件

java - 使用 cardlayout 在面板之间切换时,JTextField 和按钮不会更新

java - 编辑单元格时 TreeView 显示错误

javascript - 为什么我的代码会断开 Node 中的 Socket.io 连接?

windows - 让 .bat 在执行期间显示信息(WinSCP)

debugging - 免疫调试器上的空白注册窗口