gpt4 book ai didi

java - 寻求帮助诊断使用 apache FTP 客户端进行 FTP 传输的服务器套接字问题

转载 作者:行者123 更新时间:2023-11-30 05:00:14 27 4
gpt4 key购买 nike

我开发了一个基于 Web 的应用程序,它允许客户端/用户将文件上传到 JVM 内存。服务器端代码然后将文件通过 FTP 传输到另一台服务器。这一切在我的本地计算机上运行得很好,但我现在遇到了让它在我们的测试环境服务器上运行的问题。

在测试环境服务器上,代码成功连接并登录到远程Windows服务器,但在文件传输过程中挂起。在目标服务器上创建一个空文件,但不传输任何字节。来自 JVM 的堆栈跟踪最终杀死了线程:

[10/08/11 14:45:24:234 BST] 00000003 ThreadMonitor W   WSVR0605W: Thread "WebContainer : 2" (00000033) has been active for 666083 milliseconds and may be hung.  There is/are 1 thread(s) in total in the server that may be hung.
at java.net.PlainSocketImpl.socketAccept(Native Method)
at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:431)
at java.net.ServerSocket.implAccept(ServerSocket.java:464)
at java.net.ServerSocket.accept(ServerSocket.java:432)
at org.apache.commons.net.ftp.FTPClient._openDataConnection_(FTPClient.java:693)
at org.apache.commons.net.ftp.FTPClient.__storeFile(FTPClient.java:551)
at org.apache.commons.net.ftp.FTPClient.storeFile(FTPClient.java:1704)
... (my own app code stack trace from here on down)

看起来像是套接字问题,但谁能帮我找出问题出在哪台机器上?是测试环境 JVM 还是目标 Windows 服务器?我猜它是测试环境服务器,否则我会在本地计算机上看到这个问题吗?如果是在测试环境服务器上,是否需要开放端口(如果是,我需要什么)?非常感谢任何帮助。

最佳答案

对我来说这听起来像是防火墙问题,可以通过对 FTP 客户端使用被动模式来解决。当处于主动模式时,FTP 服务器在传输文件时会尝试发起与 FTP 客户端的连接,而防火墙/WAS 可能不喜欢这样做。

根据docs对于 commons ftpclient,默认模式是 ACTIVE,因此在您的代码中,尝试调用

ftpclient.enterLocalPassiveMode();

连接之后、文件传输之前。

关于java - 寻求帮助诊断使用 apache FTP 客户端进行 FTP 传输的服务器套接字问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7012392/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com