从FTP服务器的角度来看,如果客户端通过RETR命令请求文件,则服务器将通过指定的端口创建到客户端的数据连接(套接字),并通过写入输出流来开始传输。对服务器进行编码(JAVA)的方式是,在套接字中完成写操作后,将刷新输出流,然后关闭套接字。此后,将代码“226”发送到控制 channel 中的客户端。
由于连接是通过非常慢的网络进行的,因此在实际数据传输完成之前会到达226消息。这是一个棘手的情况,其中无法更改客户端代码,并且服务器必须确保在客户端接收到数据之后发送226。
我尝试在互联网上搜索,但输入很少,但是不确定哪一个是标准输入。
1.使用setSoLinger()方法打开SO_LINGER并设置超时。
2.在将每个字节写入套接字后引入延迟(对于快速连接,性能会受到影响)。
除了上述以外,还有其他解决方案吗?关于在Linux/Solaris/Windows FTP服务器中发送226的标准的任何想法。
我可以在stackoverflow中看到类似的线程“何时从FTP服务器发送226?” ,但从与我的问题有关的信息中找不到太多信息。
非常感谢您的帮助...谢谢
最佳答案
当然,不要拖延,我唯一能想到的就是建立一个代理层来拦截确认代码,检查文件,然后将代码重新路由到应用程序,这就像Telerik Fiddler所做的那样。应用。
在将消息传递到服务器时,我之前在JMS确认模式中使用的概念相同,我必须实现相同的概念。
祝大家好运我的 friend