1

私は単一のファイルをダウンロードするためにこのコードを持っています。

    import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import org.apache.commons.net.ftp.FTPClient;
public class NetTest {
public static void main(String[] args){
FTPClient client = new FTPClient( );
OutputStream outStream;
    try {

これはサーバーとパスワードの一部です。

   client.connect( "servername" );
    client.login("noman123", "pass");
    String remoteFile = "/a.txt";
    outStream = new FileOutputStream( "a.txt" );

単純な塗りつぶしのダウンロードですが、この行にエラーがあります

    client.retrieveFile( remoteFile, outStream );
} catch(IOException ioe) {
    System.out.println( "Error communicating with FTP server." );
} finally {
    try {
        client.disconnect( );
    } catch (IOException e) {
        System.out.println( "Problem disconnecting from FTP server" );
    }
}

}
}

そしてそれは私にエラーを与えます私はあなたが今直面している問題を理解できることを願っています

java.net.SocketException:ソフトウェアによる接続の中止:java.net.SocketOutputStream.socketWrite0(ネイティブメソッド)のjava.net.SocketOutputStream.socketWrite(SocketOutputStream.java:109)のソケット書き込みエラーjava.net.SocketOutputStream.write( SocketOutputStream.java:153)at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:221)at sun.nio.cs.StreamEncoder.implFlushBuffer(StreamEncoder.java:291)at sun.nio.cs.StreamEncoder.implFlush (StreamEncoder.java:295)at sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:141)at java.io.OutputStreamWriter.flush(OutputStreamWriter.java:229)at java.io.BufferedWriter.flush(BufferedWriter。 java:254)org.apache.commons.net.ftp.FTP .__ send(FTP.java:496)atorg.apache.commons.net.ftp.FTP。sendCommand(FTP.java:470)at org.apache.commons.net.ftp.FTP.sendCommand(FTP.java:547)at org.apache.commons.net.ftp.FTP.port(FTP.java:872) org.apache.commons.net.ftp.FTPClientで。openDataConnection(FTPClient.java:667)at org.apache.commons.net.ftp.FTPClient.retrieveFile(FTPClient.java:1595)at FtpDownloadDemo.main(FtpDownloadDemo.java:25)

4

4 に答える 4

4

ファイアウォールをオフにします。この問題では

于 2012-06-01T16:14:23.950 に答える
2

サーバーにpingを実行して手動でログインできることを確認してください。ただし、問題がないと仮定すると、さらに2つのことを実行します。

1)FTPクライアントのドキュメントに従って、実際に接続されていることを確認します

// After connection attempt, you should check the reply code to verify success.
reply = client.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply))
        { // print more complete error }

ここに完全な例があります。

2)ルートディレクトリにアクセスしようとしているリモートファイル「/a.txt」を取得しようとしていて、FTPサーバーがアクセスを許可するように設定されていないことが原因である可能性があります。ftpクライアントがユーザーをダンプするように設定されているディレクトリで「a.txt」だけを試してください。

于 2012-05-25T14:56:24.983 に答える
0

ファイアウォールの背後にいる場合にFTPClientのenterLocalPassiveModeメソッドを呼び出す必要がある特定のサンプルコードに関するドキュメント。

于 2012-12-10T22:12:46.943 に答える
0

この記事を読むhttp://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7077696

この問題を解決するための作業開始プログラム

-Djava.net.preferIPv4Stack = true

于 2013-08-02T16:34:23.770 に答える