- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用在 Android 模拟器中运行的 Java FTPSClient
从本地 FileZilla 服务器下载文件。
我写了这个帮助代码来下载一个文件:
public boolean downloadSingleFile(FTPSClient ftpClient,
String remoteFilePath, File downloadFile) {
OutputStream outputStream;
Log.i("t1", remoteFilePath + " - " + downloadFile.getAbsolutePath());
try {
outputStream = new BufferedOutputStream(new FileOutputStream(
downloadFile));
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
boolean retval = ftpClient.retrieveFile(remoteFilePath, outputStream);
outputStream.flush();
return retval;
} catch (Exception e) {
Log.e("dwFile", e.toString());
Log.e("dwFile", ftpClient.getReplyString());
} return false;
}
我这样调用这个函数:
FTPSClient dwClient = new FTPSClient();
dwClient.addProtocolCommandListener(
new PrintCommandListener(
new PrintWriter(new OutputStreamWriter(System.out, "UTF-8")), true));
dwClient.setConnectTimeout(30 * 1000);
dwClient.connect(OmsSettingsFunctions.getFTPServer());
Log.i("dwDB", dwClient.getReplyString());
if (dwClient.login(FPTuser, FTPpass)) {
Log.i("dwDB", dwClient.getReplyString());
dwClient.enterLocalPassiveMode();
File dwFile = new File(externalPath + "/Android/data/com.myapp/files/Documents/db.temp");
if(!downloadSingleFile(dwClient, "/DBs/db.txt", dwFile)) {
Log.e("dwDB", "Download could not finish (DB)");
Log.e("dwDB", dwClient.getReplyString());
}...
但我一直收到这个错误:
I/System.out: 220-FileZilla Server version 0.9.41 beta
I/System.out: 220-written by Tim Kosse (Tim.Kosse@gmx.de)
220 Please visit http://sourceforge.net/projects/filezilla/
I/System.out: AUTH TLS
D/EGL_emulation: eglMakeCurrent: 0xa209dd60: ver 3 0 (tinfo 0x9f652ff0)
D/EGL_emulation: eglMakeCurrent: 0xa209dd60: ver 3 0 (tinfo 0x9f652ff0)
I/System.out: 234 Using authentication type TLS
I/dwDB: 234 Using authentication type TLS
I/Permission: Readingpermission is granted
I/Permission: Writingpermission is granted
I/System.out: USER *******
I/System.out: 331 Password required for omstest
I/System.out: PASS *******
I/System.out: 230 Logged on
I/dwDB: 230 Logged on
I/t1: /DBs/db.txt - /storage/0FF0-280B/Android/data/com.myapp/files/Documents/db.temp
I/System.out: TYPE I
I/System.out: 200 Type set to I
I/System.out: PASV
I/System.out: 227 Entering Passive Mode (127,0,0,1,199,113)
E/dwFile: java.net.ConnectException: Connection refused
227 Entering Passive Mode (127,0,0,1,199,113)
E/dwDB: Download could not finish (DB)
227 Entering Passive Mode (127,0,0,1,199,113)
我已经尝试使用 enterLocalActivemode()
而不是 enterLocalPassivmode()
但它没有帮助。 FTP 服务器在我的本地计算机上强制执行并运行 TLS。我通过 10.0.2.2(Android 环回)连接到它。我该如何解决这个问题?
最佳答案
虽然我不熟悉 Android 模拟器,但我假设您需要连接到 10.0.2.2 才能连接到模拟器主机。
在 FTP 被动模式下,服务器发回 FTP 客户端需要连接到的 IP 地址以传输文件(或目录列表)。当您的 FTP 服务器监听 127.0.0.1 时,它会发回该 IP 地址。但是 127.0.0.1 在您的 Android 代码的上下文中指的是(模拟的)Android 主机。因此“连接被拒绝”。
这与连接到 NAT 后面的 FTP 服务器的常见问题非常相似。参见 FTP server running on Port 2000 over NAT not working on Passive Mode
因此解决方案是相同的:
显然,这反过来又会导致普通客户端无法使用 FTP 服务器。
正如您正确评论的那样,此问题仅在从 Android 模拟器连接到在模拟器主机上运行的 FTP 服务器时出现。
另一种解决方案是使用 FTPClient.setPassiveNatWorkaroundStrategy
。它接受 HostnameResolver
接口(interface)的实现。如果您以将 127.0.0.1 转换为 10.0.2.2 的方式实现,即使在服务器上没有任何更改,它也将允许您的 Java 代码连接。
public static class ServerResolverImpl implements HostnameResolver {
private FTPClient client;
public ServerResolverImpl(FTPClient client) {
this.client = client;
}
@Override
public String resolve(String hostname) throws UnknownHostException {
// Ignore "hostname" returned by the server.
// Instead always use the primary address of the FTP server.
return this.client.getRemoteAddress().getHostAddress();
}
}
关于java - Android模拟器从本地FTP服务器下载报错 "227 Entering Passive Mode"/"Connection refused",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52077130/
我已经禁用了回车键,以便可以执行 ajax 提交,但我想确保如果用户在服务器响应返回之前按两次回车键,则表单不会提交两次。 这里我禁用了回车键并为其分配了一个名为 submitForm() 的函数:
我正在尝试将 $animate 服务合并到我自己的指令中。我无法进入并离开以实际设置动画。 奇怪的是,使用$animate.enter,元素附加到DOM,回调函数触发。但似乎从未添加 ng-anima
如果 ,我如何检查 Bash输入 键被按下了? 我正在使用读取命令: read -p "Please press ENTER" var 最佳答案 首先检查退出状态是否正常($?应该为0)。 其次,检查
在我的 PreviewKeyDown() handler 如何区分数字键盘上的 ENTER 键和主板上的 ENTER 键? 两个键返回相同的值 Key.Enter为 KeyEventArgs.Key
这个问题已经有答案了: How do I detect "shift+enter" and generate a new line in Textarea? (19 个回答) 已关闭10 年前。 我正
我的问题与这个 question 有点相关.但是,我没有奢侈去监听 submit 事件,所以这个问题的答案对我来说不起作用。 我的问题:是否可以在 Javascript 中检测日文/中文建议菜单何时打
我希望能够在不需要实现新类的情况下修改 wpf 文本框的行为。 我想要一个类似 Enter/Alt+Enter 行为的 Excel,当用户点击“Enter”时,文本框被验证(movefocus ...
在 Chrome 中的 contenteditable 中按 Enter 时,会插入一个 div。这会干扰我的标记,我需要它成为 br。 我知道shift-enter是一个br。解决问题的最佳方法是什
我正在使用$('.inputs').keydown(function (e) { if (e.which === 13) {到达下一个输入字段。但是每次我按 enter/return 转到下一个输入字
我有一个 textarea ,其中当您单独按 Enter 时,jquery ajax 会启动,但我想添加一个功能,即当您按 Enter + Shift 时仅转到新行并且不启动ajax。你能指导一下吗?
场景如下: 有一个密码字段,我可以在其中输入文本(这是使用 sendKeys 完成的) 现在,没有提交/输入按钮 所以我必须按 Enter 键并登录应用程序 以下是我搜索并尝试但没有成功的几种方法:
这是我尝试过的,但显然失败了: ed.on('keyup', function(e){ console.log(e.keyCode) if(e.keyCode == 13 && !e.
所以我有一个带有 jQuery 的表单,可以阻止用户使用 Enter 键提交表单。 这是代码: $(document).ready(function() { // code prevent
有人知道如何在Javascript中检测按键代码“+1 Enter”和“-1 Enter”吗?我想检测何时一一按下键码而不是一次按下键码。 但是当我编写以下代码时,没有给出任何效果。 // +1 en
我想添加 shift + enter 键转到下一行,只需 enter 键 即可使用 JAVASCRIPT 触发提交按钮仅。 如何实现? 我也想提交多行文本......提前致谢 function typ
int DisplaySchedule() { int nDisplaySchedule_Choice; system("cls"); printf("----- DISPLA
在 textarea 中,当用户按下 Shift+Enter 时,它应该在下一个新行继续,当他简单地按下 Enter 时,它应该提交表单而不使用提交按钮。 这是 Fiddle!! 我浏览了很多但对我没
我有以下简单的 我还有以下 jQuery/JavaScript 代码块: $('textarea#streamWriter').keydown(function (e) { if (e.k
我有许多将转换为HTML的Word文档。要求单词文档中的段落应转换为元素。 在使用Microsoft Office API的SaveAs方法进行了一些测试以将文档转换为HTML之后,我意识到带有手动换
终端是否可以检测 ⇧ Shift+Enter↵ 或 Ctrl+Enter↵ 按键? 我正在尝试配置 vim 来执行使用这些序列的键映射,虽然它们在 gvim 中工作正常,但它们似乎在任何终端控制台中都
我是一名优秀的程序员,十分优秀!