10

XAMPPとFileZillaを使用してFTP経由で簡単なtxtファイルをアップロードしようとしています。Apache CommonsNet3.0.1ライブラリ
を使用しています。 これは私のコードであり、非常に基本的なものです。

FTPClient client = new FTPClient();
InputStream in = new ByteArrayInputStream("IT WORKS! :D".getBytes());

try {
    client.connect("localhost");
    client.login("user", "password");
    client.enterLocalPassiveMode();
    client.storeFile("textfile.txt", in);
} finally {
    try {
        in.close();
        client.logout();
        client.disconnect();
    } catch (Exception e) {
    }
}


しかし...storeFile()はjava.net.SocketExceptionをスローします:

Exception in thread "main" java.net.SocketException: Connection reset
    at java.net.SocketInputStream.read(SocketInputStream.java:189)
    at java.net.SocketInputStream.read(SocketInputStream.java:121)
    at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:283)
    at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:325)
    at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:177)
    at java.io.InputStreamReader.read(InputStreamReader.java:184)
    at java.io.BufferedReader.fill(BufferedReader.java:154)
    at java.io.BufferedReader.read(BufferedReader.java:175)
    at org.apache.commons.net.io.CRLFLineReader.readLine(CRLFLineReader.java:58)
    at org.apache.commons.net.ftp.FTP.__getReply(FTP.java:310)
    at org.apache.commons.net.ftp.FTP.__getReply(FTP.java:290)
    at org.apache.commons.net.ftp.FTP.sendCommand(FTP.java:474)
    at org.apache.commons.net.ftp.FTP.sendCommand(FTP.java:547)
    at org.apache.commons.net.ftp.FTP.sendCommand(FTP.java:596)
    at org.apache.commons.net.ftp.FTP.pasv(FTP.java:945)
    at org.apache.commons.net.ftp.FTPClient._openDataConnection_(FTPClient.java:719)
    at org.apache.commons.net.ftp.FTPClient.__storeFile(FTPClient.java:551)
    at org.apache.commons.net.ftp.FTPClient.storeFile(FTPClient.java:1704)
    at ftpexample.ftpexample.main(ftpprova.java:17)


どうしたの??:(オンラインホスティングサービスでも試してみましたが、同じ結果になりました...
これはファイアウォールまたはWindowsのサービス関連の問題でしょうか??

4

3 に答える 3

18

コマンドプロンプトで管理者としてこれを実行することで解決しました

netsh advfirewall set global StatefulFTP disable

これはWindowsマシンでのJava7のバグであり、ここで報告されます。

于 2011-12-01T18:56:54.713 に答える
0

正直なところわかりませんが、次のことを試してみてください。

次のコードのようなものを使用します。

System.out.println(client.getReplyCode());
for(String s : client.getReplyStrings())
    System.out.println(s);

client.login("user", "password");接続のステータスを確認した後。

上記のコードから適切なヒントが得られない場合は、呼び出した後にclient.storeFile("textfile.txt", in);を追加してみてくださいclient.completePendingCommand();

幸運を!:)

于 2011-11-30T22:35:30.387 に答える
0

セットする:

client.setUseEPSVwithIPv4( true );

これは、Windowのファイアウォール設定を変更できない場合に機能します。

于 2013-11-28T15:24:48.763 に答える