2015-12-06 1 views
0

Я пытаюсь узнать, как подключить свое приложение к определенному FTP-серверу. Для этой цели я использую Apache Commons net, что неплохо. Пока мне удалось подключить мое приложение к FTP-серверу, пока я подключился к Wi-Fi. Пока я подключен к Wi-Fi, его подключение и ведение журнала происходит гладко, но когда я пытаюсь подключить свой FTP-сервер к моей сети celluar, он дает мне ошибку таймаута подключения. Сначала я подумал об этом из-за скорости сотовой сети. Поэтому я увеличил тайм-аут для предоставления моей сотовой сети гораздо больше времени для подключения, но это не сработало. Я имею в виду, что это не работает. Вот код, который я использую. Его в классе, который расширен AsyncTask.Android - с Apache Commons Net, ошибка таймаута соединения при использовании сотовой сети

@Override 
    protected String doInBackground(String[] params) { 
     String temp = "Files : \n"; 
     FTPClient client = new FTPClient(); 
     client.setConnectTimeout(360 * 1000); 
     client.setDefaultTimeout(360 * 1000); 

     try { 
      Log.d("FtpDebug", "Connecting ..."); 
      client.connect(myftpservername); 
      client.enterLocalPassiveMode(); 
      Log.d("FtpDebug","Connected!"); 
     }catch (Exception e){ 
      Log.d("FtpError", e.toString()); 
     } 

Я сказал, он не работает, потому что это дает мне эту ошибку

D/FtpError: java.net.SocketTimeoutException: failed to connect to xxx.xx.xxxx.xx.xx/xxx.xxx.xx.x (port 21) after 360000ms: isConnected failed: ETIMEDOUT (Connection timed out)

В этой ошибки он говорит, что не удалось подключиться после попытки 360.000ms = 6 минут. Но на самом деле, я получаю эту ошибку за 1 минуту или менее 1 минуты. Так что ее даже не ждут 6 минут.

Понятно, что Im делает что-то неправильно. Я был бы очень рад, если бы кто-то это сказал. Благодарю.

ответ

0

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

Решение: для этого нет прямого решения. Если у вас нет разрешения на изменение настроек вашего FTP-сервера. Возможно, вы захотите попробовать другие FTP-серверы, чтобы избежать или сузить свою проблему. Но я бы хотел дать быстрый совет новичкам вроде меня. Если вы пытаетесь сделать что-то вроде приложения для сообщений или нет, не начинайте делать это с FTP, а используйте MySQL вместо этого. FTP-серверы, как уже указывал Штеффен, действительно ненадежны и могут вызвать много неприятностей, когда вы думаете, что готовы после завершения вашего кода.

0

FTP - протокол, который использует TCP-соединение для передачи команд FTP (контроль соединения), но для каждой передачи данных используется новое TCP-соединение (подключение к данным). Информация о конечной точке соединения данных (т. Е. Используемого порта) обменивается внутри управляющего соединения.

Эта настройка делает FTP кошмаром, когда задействованы брандмауэры или трансляции сетевых адресов (NAT), что обычно происходит при подключении от частных сетей, а также от сотовых сетей. Иногда можно обойти эти проблемы, переключаясь между пассивным и активным режимами, иногда в сети используются прозрачные вспомогательные приложения для решения этих проблем, и иногда даже это вспомогательное приложение не поможет или даже ухудшит ситуацию.

Вы можете попробовать играть с активным и пассивным режимом FTP, IPv4 и IPv6, и, возможно, вы сможете заставить приложение работать в этой конкретной сотовой сети. Но он может быть еще поврежден внутри другой сети. Вместо этого я рекомендую вам избавить вас от этой проблемы и использовать другой протокол, который не имеет проблем с дизайном, например HTTP/HTTPS или SFTP (но не FTPS, который имеет те же проблемы).

+0

Насколько я знаю, у Apache commons net есть два метода для создания пассивного режима: .enterLocalPassiveMode(); '.enterRemotePassiveMode();' но мне нужно сначала подключить свой FTP-сервер для использования таких методов. В противном случае это дает мне ошибку соединения. Я не знаком с FTP-серверами или другими методами, которые вы предложили. Можете ли вы направить меня, если мне нужно изменить его, чтобы сделать его более стабильным? – BlocBloc

+0

@BlocBloc: Я не знаком с конкретными реализациями в Apache Commons, я знаю только внутренности и проблемы самого FTP-протокола. Поэтому моя рекомендация состоит в том, чтобы держаться подальше от него, потому что это просто вызывает проблемы в настройках, которые я описал, и многие из них не могут быть исправлены на стороне клиента или сервера. –

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