FTP 至 1and1.com

FTP to 1and1.com

下面的代码适用于我试过的其他两个网站,但不适用于我的 1and1 托管域。 return 代码始终为 500 - 永久否定完成回复。

我知道我正在连接,因为 FTPReply.isPositiveCompletion(回复)return 是真的。我尝试了从 phone 存储中读取文件并从代码早期填充的字节数组发送它。这是字节数组。两者都 return 500。两者都在其他站点上工作。

如果我不使用 enterLocalPassiveMode() 代码将停止执​​行 storeFile 调用。没有异常,没有套接字超时。它就在那里结束,异步任务不会在该会话中再次调用。该代码不会在其他站点上执行此操作。

我已经尝试过 ASCII 和 BINARY 文件类型。 return 500。1and1 站点说要使用我的域和端口 21。我可以连接到 CoreFTP 并使用我设置的两个帐户进行读写。

我也厌倦了 ftp4j 并且对所有场景都有相同的响应所以回到 Apache 因为代码已经用强大的错误捕获编写了。

mydomain.com 和 ftp.mydomian.com 我都试过了。两个500。我还尝试了在 CoreFTP window 中可以看到的点四边形,但我用 Apache Java 代码得到了 "cannot resolve host name"。也许不是静态 IP?

这就是 CoreFTP 所做的。它连接到端口 21,然后进入被动模式和 ASCII 数据连接。

希望不大,但有没有其他人在 Android Studio 中使用 Java FTP 进入他们的 1and1 域?

格雷格

正在解决mydomain.com...
将套接字 #5684 连接到 xx.xx.xx.xxx,端口 21... 220 微软 FTP 服务
用户 ftp79815757-0
331 ftp79815757-0 需要密码。
通过 **********
230 用户登录。
系统
215Windows_NT
别活了... 密码
257 "/ftp79815757-0" 是当前目录.
PASV
227 进入被动模式 (xx,xxx,xx,xxx,xxx,xxx)。
列表
将套接字 #5700 连接到 xx.xx.xx.xx,端口 62894... 150 打开ASCII模式数据连接。
226 传输完成。
在 0.094 秒内传输了 51 个字节

FTPClient mFtpClient = new FTPClient();
String ip = "my domain dot com";
String userName = "ftp79815757-0";
String pass = "password";

mFtpClient.connect(InetAddress.getByName(ip));
mFtpClient.login(userName, pass);
int reply = mFtpClient.getReplyCode();
if (FTPReply.isPositiveCompletion(reply)) {
    mFtpClient.setFileType(FTP.BINARY_FILE_TYPE);
    //one thread said this would do the trick
    mFtpClient.enterLocalPassiveMode();
    mFtpClient.enterRemotePassiveMode();

    InputStream stream = new ByteArrayInputStream(imageData);

    //I have two accounts. One points to images_in
    /*if (!mFtpClient.changeWorkingDirectory("images_in")) {
       Log.e("ChangeDir", String.valueOf(mFtpClient.getReplyCode()));
    }*/

    if (!mFtpClient.storeFile("remoteName.jpg", stream)) {
        Log.e("FTPUpload", String.valueOf(mFtpClient.getReplyCode()));
    }

    stream.close();
    mFtpClient.disconnect();
}

终于明白了。主要问题是我使用的是旧版本的 Apache 库。我使用的 Jar 是 commons-net-1.4.jar。另一个线程中有人将我指向 commons-net-3.3.jar。

我注释掉了 mFtpClient.enterLocalPassiveMode() 和 mFtpClient.enterRemotePassiveMode(),并且有一些线索和错误它适用于 FTP.BINARY_FILE_TYPE 而不是 ASCII_FILE_TYPE。 ASCII 在那里得到了文件,但它是垃圾。