Попытка заставить мое приложение для Android помещать файлы на мой FTP-сервер - PullRequest
0 голосов
/ 05 августа 2011

Я потратил много времени, пытаясь заставить этот код работать, и в его текущем состоянии он почти точно отражает код, который я нашел в https://stackoverflow.com/questions/3482583/apache-ftpclient-failing-to-download-larger-files. Я также использую apache commons net. по какой-то причине мое приложение никогда не проходит этап client.connect, даже когда я подключаю другие IP-адреса FTP-серверов, которые должны работать.

import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.*;

import android.app.Activity;
import android.os.Bundle;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ImageView;



public class FtpClientService extends Activity {
    //static int fail;


 public FtpClientService(){  
 }


 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
        WindowManager.LayoutParams.FLAG_FULLSCREEN);
    setContentView(R.layout.ftp);
    FtpConnect();
}

public static void FtpConnect(){
  String userName="usrname";
  String passWord = "password";
  String ftpAddress = "127.0.0.1"; //this isnt the ip address I was using...
  String retrieveFromFTPFolder = "/Pictures/";
  String strLine;
  DataInputStream inputStream = null;
  BufferedReader bufferedReader = null;
  FTPClient client = null;
  FTPFile[] ftpFiles = null;
  int reply;

  try{

      client = new FTPClient();
   client.setListHiddenFiles(true);
   client.connect(ftpAddress); //this right here is where it fails
   client.login(userName, passWord);
   client.setFileType(FTP.BINARY_FILE_TYPE);
      if(!client.completePendingCommand()) {
          client.logout();
          client.disconnect();
          System.err.println("File transfer failed.");

      }

  } catch (Exception e) {
   if (client.isConnected()) {
    try {
     client.logout();  
     client.disconnect();  
    } 
    catch (IOException f) {}
   }
  }
  finally{
   if (client.isConnected()) {
    try {
     client.logout();
     client.disconnect();
    }
    catch (IOException f){}
   }
  }  
 }

 public static void main(String[] args) {
  FtpConnect();
 }

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 05 августа 2011

Попробуйте использовать это:

client.connect(InetAddress.getByAddress(ftpAddress,new byte[]{127,0,0,1}));
0 голосов
/ 05 августа 2011

В методе connect передайте ему построенный InetAddress с соответствующим адресом и портом.

Кроме того, не выполняйте FTP-соединение в основном потоке, рассмотрите возможность использования AsyncTask.

...