【发布时间】:2014-02-13 04:18:18
【问题描述】:
我使用 Apache 的 FTPClient 将文件上传到 FTP 服务器。
然而,当我们上传文件时,即使 FTP 服务器变得不可用,storeFile() 也会挂起。 storeFile() 不会取消上传。
tcpdump 跟踪:
22:04:29.584767 IP 10.84.78.2 > 192.168.114.2:ICMP 10.84.78.2 tcp 端口 53751 不可达,长度 142
有没有办法设置超时?我已经尝试在 connect() 之后使用 setSoTimeout(),在 storeFile() 之前使用 setDataTimeout()。但是这个属性似乎与这个问题无关。
线程转储,在 FTP 服务器不可用后进行:
"Thread-1" prio=10 tid=0x00007f1a700f1800 nid=0x479b runnable [0x00007f1a76fea000]
java.lang.Thread.State: RUNNABLE
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(Unknown Source)
at java.net.SocketOutputStream.write(Unknown Source)
at java.io.BufferedOutputStream.flushBuffer(Unknown Source)
at java.io.BufferedOutputStream.write(Unknown Source)
- locked <0x00000000bb026df8> (a java.io.BufferedOutputStream)
at org.apache.commons.net.io.ToNetASCIIOutputStream.write(ToNetASCIIOutputStream.java:75)
- locked <0x00000000bb028e20> (a org.apache.commons.net.io.ToNetASCIIOutputStream)
at org.apache.commons.net.io.Util.copyStream(Util.java:111)
at org.apache.commons.net.ftp.FTPClient._storeFile(FTPClient.java:653)
at org.apache.commons.net.ftp.FTPClient.__storeFile(FTPClient.java:624)
at org.apache.commons.net.ftp.FTPClient.storeFile(FTPClient.java:1976)
at ... (FTPClient.java:103)
at ... (Sender.java:67)
netstat -anpo 输出:
netstat -anpo | grep 192
tcp6 0 0 10.84.78.2:9011 192.168.114.2:21 VERBUNDEN 19310/java aus (0.00/0/0)
tcp6 0 201480 10.84.78.2:33088 192.168.114.2:20 VERBUNDEN 19310/java ein (10,26/2/0)
【问题讨论】:
-
在新线程中启动 storeFile() 方法并在超时时从另一个线程中中断它怎么办?