2015-02-23 3 views
0

Недавно я пытался подключиться к FTP-серверу через мобильное приложение. Я могу подключиться к своему серверу и проверить, подключено ли оно (что это такое). Следующим шагом будет логин с именем пользователя и паролем после установки пассивного режима. Последнее, что я сделал, это получить код ответа с сервера, но когда мое приложение запущено, мои экраны становятся черными. Когда я снова открываю приложение, он говорит: «recv failed: ECONNREST (Connection reset by peer)» в качестве сообщения об ошибке, которое я выводил. Вот мой код:Java FTPClient: получение «Connection reset by peer» при вызове getReply()

@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

Я считаю, что это звонок getReply(), который блокирует ваш код.

Вы не отправили какую-либо команду, на которую сервер должен ответить, поэтому клиент ждет ответа до тех пор, пока он или сервер не истечет.

Последнее произошло, вероятно, поэтому соединение было закрыто/сброшено сервером.

Вы обычно не вызываете getReply(). В большинстве случаев это называется внутренне FTPClient для вас:

использовать только этот метод, если вы реализуете свой собственный FTP-клиент, или если вам нужно получить дополнительный ответ от FTP-сервера.


В то время как у меня нет опыта работы с развитием Android, от симптомов и вашего кода, я предполагаю, что вы подключаетесь к серверу с GUI потока, то, что является довольно плохой практикой. Это объясняет, почему экран остается пустым, пока вы ждете.

+0

Хорошо. Я дал серверу команду для перечисления некоторых файлов «ftpClient.listFiles()», которые должны дать мне массив локализованных файлов. Когда я проверяю «ftpClient.listFiles(). Length», он возвращает 0, хотя он содержит 3 файла. –

+0

@Job Это для другого вопроса. Обратите внимание, что это не дискуссионный форум. Это сайт Q & A. Я считаю, что на этот вопрос был дан ответ. –

Смежные вопросы