gpt4 book ai didi

Java ftpclient 应用程序不连接

转载 作者:太空狗 更新时间:2023-10-29 12:45:43 26 4
gpt4 key购买 nike

我是 android 和 java 编程的新手。我写了下面的代码来连接到 ftp 服务器

public class NewMainActivity extends Activity {
TextView Display;
//declare a public FTP client object.
public FTPClient mFTPClient = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_new_main);
final TextView Display = (TextView) findViewById(R.id.tvResults);

try {
mFTPClient = new FTPClient();

// connecting to the host
mFTPClient.connect("www.filegenie.com",21);

// now check the reply code, if positive mean connection success
if (FTPReply.isPositiveCompletion(mFTPClient.getReplyCode())) {
// login using username & password
boolean status = mFTPClient.login("user", "MyPassword");

// Set File Transfer Mode

mFTPClient.setFileType(FTP.BINARY_FILE_TYPE);
mFTPClient.enterLocalPassiveMode();

Display.setText("Correct"+ String.valueOf(status)); //return status;
}

}catch(Exception e) {
Display.setText(" Exception message is = "+e.getMessage()+" Reply code = "+mFTPClient.getReplyCode());

}

}

当我运行这段代码时,我没有收到具体错误,但程序没有执行 mFTPClient.connect 方法并跳转到“异常”部分,我得到“null”作为异常 getMessage 和“0”作为 ReplyCode。我已经导入了所有必需的文件,例如

import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;

我正在使用 eclipse 和 ADT Build v22.0.1-685705。我还在 android 项目的库中包含了 commons-net-3.3、commons-net-3.3-sources 和 commons-net-examples-3.3 文件,还包含了 java 文件和文件夹commons-net-3.3-src |来源 |主要 | Java |组织 | Apache |下议院 | net 文件夹到 Android 项目的 src 文件夹,方法是创建文件夹 org | Apache |下议院 |网。我不知道是什么问题。任何人都可以在这方面帮助我。

可以使用商业 ftp 客户端访问同一台服务器。

提前致谢。

最佳答案

我试过你的代码,它工作正常。根据您得到的响应代码,我假设与服务器的连接还没有建立。确保您已在 list 文件中授予您的应用程序互联网权限:

<uses-permission android:name="android.permission.INTERNET" /> 

编辑: 从异常堆栈跟踪可以清楚地看出,您正在尝试从主线程执行此代码。在 Android 3.0 (Honeycomb) 或更高版本中,默认情况下您不允许在 UI 线程中执行任何网络调用。原因很简单:网络调用可能会无限期阻塞,从而有效地卡住应用程序 UI。您有两种解决方法:

惰性方法 - 禁用网络调用的 therad 检查:

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
.permitAll()
.build();
StrictMode.setThreadPolicy(policy);

您始终可以使用再次启用线程检查

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
.detectAll()
.penaltyLog()
.penaltyDeath()
.build();
StrictMode.setThreadPolicy(policy);

正确方法 - 使用 AsyncTask 从后台工作线程执行 FTP 调用。看看here有关 AsyncTasks 的示例和全面解释。

关于Java ftpclient 应用程序不连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18579676/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com