我最近试图通过移动应用程序连接到FTP服务器。 我能够连接到我的服务器并检查它是否已连接(它是否已连接)。 接下来是使用被动模式设置的用户名和密码登录。我做的最后一件事是从服务器获取回复代码,但是当我的应用程序运行时,我的屏幕变黑了。当我重新打开我的应用程序时,它显示“recv failed:ECONNREST(由对等方重置连接)”作为我输出的错误消息。这是我的代码:
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
ftpClient = new FTPClient();
textView = (TextView)findViewById(R.id.textView_id);
textView2 = (TextView)findViewById(R.id.textView2_id);
textView3 = (TextView)findViewById(R.id.textView3_id);
textView4 = (TextView)findViewById(R.id.textView4_id);
textView5 = (TextView)findViewById(R.id.textView5_id);
try{
ftpClient.connect(ip, port);
boolean connectSucces = ftpClient.isConnected();
ftpClient.login(userName,passWord);
ftpClient.enterLocalPassiveMode();
ftpClient.getReply();
int connectionMode = ftpClient.getDataConnectionMode();
if(connectionMode == ftpClient.PASSIVE_LOCAL_DATA_CONNECTION_MODE) {
textView.setText("Connected: " + connectSucces + " ConnectionMode: " + connectionMode);
}
}catch(Exception e){
textView.setText(e.getMessage());
}
}
我错过了什么吗?
答案 0 :(得分:0)
我认为调用getReply()
会导致代码死机。
您没有发送服务器应该回复的任何命令,因此客户端会等待响应,直到它或服务器超时。
后者可能发生了,这就是服务器关闭/重置连接的原因。
您通常不会自己致电getReply()
。在大多数情况下,FTPClient
为您内部调用它:
如果您要实现自己的FTP客户端,或者需要从FTP服务器获取辅助响应,请仅使用此方法。
虽然我没有Android开发经验,但从症状和代码来看,我假设您从GUI线程连接到FTP服务器,这是一种不好的做法。这可以解释为什么等待时屏幕会变空。