Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 目录为空时NLST上的FTP超时_Java_Ftp_Webmethods - Fatal编程技术网

Java 目录为空时NLST上的FTP超时

Java 目录为空时NLST上的FTP超时,java,ftp,webmethods,Java,Ftp,Webmethods,编辑:了解到Webmethods实际上使用NLST,而不是LIST,如果这很重要的话 我们的业务使用WebMethods集成服务器来处理大部分出站通信,其FTP功能还有待改进。我们遇到了一个WebMethods特有的问题,但如果有人能告诉我什么样的事情可能会导致这种情况,我将不胜感激 当轮询两个合作伙伴的FTP服务器时,我们连接没有问题,但是在空目录(没有文件和子目录)上执行NLST时,它超时了。实际误差为: com.wm.net.ftpCException:[ISC.0064.9010]jav

编辑:了解到Webmethods实际上使用NLST,而不是LIST,如果这很重要的话

我们的业务使用WebMethods集成服务器来处理大部分出站通信,其FTP功能还有待改进。我们遇到了一个WebMethods特有的问题,但如果有人能告诉我什么样的事情可能会导致这种情况,我将不胜感激

当轮询两个合作伙伴的FTP服务器时,我们连接没有问题,但是在空目录(没有文件和子目录)上执行NLST时,它超时了。实际误差为:

com.wm.net.ftpCException:[ISC.0064.9010]java.net.SocketTimeoutException:接受超时

它是在调用pub.client.ftp:ls服务时抛出的。我已经登录了许多FTP客户端,在相同的站点上没有问题。我使用了windows、FileZilla和lftp中默认的FTP客户端。都没有问题。据我所知,服务器本身不是相同的FTP服务器软件。一个是微软的FTP,另一个我不确定,但肯定不是微软

知道什么会导致FTP客户端在空目录上等待NLST响应时超时吗?FTP服务器的可见响应似乎是相同的,但NLST对我不知道的空目录的响应方式是否有差异

这两台服务器上的问题是一致的。在包含文件或子目录的目录中,一切都可以正常工作,但在为空时则不行

如有任何想法或指示,将不胜感激

谢谢


Eric Sipple

我不确定这是否是同一个问题,但我在不久前使用另一个Java FTP客户端(commons.net)时也有类似症状。问题原来是由连接的主动/被动模式引起的。
对不起,我不能给你更多的细节,这就是我所能记得的。。。希望能有所帮助。

我不确定是不是同样的问题,但不久前我在使用Java中的另一个FTP客户端(commons.net)时出现了类似症状。问题原来是由连接的主动/被动模式引起的。
对不起,我不能给你更多的细节,这就是我所能记得的。。。希望能有所帮助。

吉列尔莫·瓦康塞洛斯的回答是正确的。有两种FTP模式,主动和被动。默认模式为活动模式。Active要求服务器在某个TCP/IP端口上连接回客户端。这不适用于防火墙,因为此端口可能会被阻止,或者如果您位于NAT路由器后面,则不会映射


如果你改用被动(PASV)模式,你就不会有什么悬念。

吉列尔莫·瓦康塞洛斯的回答是正确的。有两种FTP模式,主动和被动。默认模式为活动模式。Active要求服务器在某个TCP/IP端口上连接回客户端。这不适用于防火墙,因为此端口可能会被阻止,或者如果您位于NAT路由器后面,则不会映射


如果改为使用被动(PASV)模式,则不应挂起。

明天在这里完成维护时,我将运行一些设置为被动的新测试,但我不确定这是问题所在。如果目录中有文件或子目录,我们可以获得目录列表。只有当我们正在加载的目录为空时,它才会失败


主动/被动差异是否仅在空目录中出现,或者是否存在其他可能性?

明天维护完成后,我将运行一些设置为被动的新测试,但我不确定这是问题所在。如果目录中有文件或子目录,我们可以获得目录列表。只有当我们正在加载的目录为空时,它才会失败


主动/被动的区别是只针对空目录,还是有其他可能?

我在WebMethods is 6.5版本中尝试过这一点,更新了WmPRT_6-5-1_SP1,is_6-5_SP3

它第一次运行得很好

我打开了FTP服务器上的调试(Debian的默认ftpd)。WebMethods的NLST尊重传递给它的主动/被动参数

NLST命令并没有什么特别之处,它在空目录中的正确行为也并没有什么特别之处——若列表有效,那个么RETR、STOR和NLST也应该有效。如果NLST使用的是非空目录,那么它应该使用空目录

所以我的猜测是:

  • 你的WM版本有一个bug,我没有
  • 你的FTP服务器有一个错误,我没有
  • 您的系统中有一个古怪的协议感知防火墙,它不喜欢FTP数据套接字中没有数据
防火墙供应商在FTP方面有点任性。。。 使用其他客户端进行测试时,请确保它来自运行WebMethods Integration Server的同一台计算机

为了记录在案,以下是活动NLST应该发生的事情

  • 客户端打开一个侦听套接字,并发送一个包含该套接字详细信息的端口命令
  • 客户端发送NLST命令
  • 服务器连接到客户端的侦听套接字(这是数据套接字)
  • 服务器通过数据套接字传输列表(在本例中为零字节)
  • 服务器关闭数据套接字
。。。在被动模式下

  • 客户端发送PASV命令
  • 服务器打开一个侦听套接字,并使用包含其详细信息的PASV响应进行响应
  • 客户端连接到侦听套接字(这是数据套接字)
  • 客户端发送NLST命令
  • 服务器通过数据套接字传输列表(再次为零字节)
  • 服务器关闭数据套接字

我在WebMethods IS 6.5版更新了WmPRT_6-5-1_SP1,IS_6-5_SP3中尝试了这一点

它第一次运行得很好

我打开了FTP服务器上的调试(Debian的默认ftpd)。WebMethods的NLST尊重传递给它的主动/被动参数

什么都没有