www.boolean.name

www.boolean.name (http://forum.boolean.name/index.php)
-   Библиотеки (http://forum.boolean.name/forumdisplay.php?f=124)
-   -   Lib_FTP (http://forum.boolean.name/showthread.php?t=6256)

aleshka 19.08.2008 17:32

Lib_FTP
 
Вложений: 2
Работа с FTP сервером в пассивном режиме.
Пока позволяет залогиниться и отослать файл из строки.
В планах - отправка и прием из ФС. Следите за обновлениями ))

Сюда же прикрепляю пример захвата кадра с камеры, сжатие его в JPEG и отправку его же на ФТП сервер. Кто то тоже очень интересовался этой темой ))
Протестировано на мотороле V3X и эмуляторе WTK2.5, все замечательно работает ))

m1kc. 28.09.2008 19:05

Lib_FTP
 
Ну и где обещанные обновления? Мне бы такая либа очень пригодилась. :)

WizardJIOCb 23.10.2008 22:05

Ответ: Lib_FTP
 
скорость не очень блин

abcdef 02.01.2009 17:22

Ответ: Lib_FTP
 
несколько переделанная и оптимизированная версия от arT (c). IronWoodcutter@bk.ru
добавлена функция получения лога обмена,
исправлена ошибка протокола передачи, теперь нормально работает с ftp.narod.ru
Код:

import javax.microedition.io.Connector;
import javax.microedition.io.SocketConnection;
import javax.microedition.io.StreamConnection;
import java.io.InputStream;
import java.io.OutputStream;
import java.lang.String;

class Lib_ftp {

private static SocketConnection c;
private static InputStream i;
private static OutputStream o;
private static String answer = "";
private static String flog  = "";

public static int socketopen(String url) {
// открыть socket соединение
  try{
    c = (SocketConnection) Connector.open(url);
    i = c.openInputStream();
    o = c.openOutputStream();
    return 0;
  }catch(Exception ex) {return -1;}
}

public static void socketclose() {
// закрыть socket соединение
  try{
    if(i != null) {i.close(); i=null;}
    if(o != null) {o.flush(); o.close(); o=null;}
    c.close();
  }catch(Exception ex) {}
  c=null;
}

public static int socketavailable() {
// возвращает количество байт в буфере приема
  try{
    if(i != null) return i.available();
  } catch(Exception ex) {}
  return 0;
}

public static int rbyte() {
// чтение байта из входного потока
  try{
    return i.read();
  }catch(Exception ex) {return -1;}
}

public static String rstr() {
// чтение строки байтов из входного потока
  StringBuffer buf = new StringBuffer();
  if(i != null) try{while (i.available() == 0);} catch(Exception ex) {}
  if(i != null) try{while (i.available() != 0) buf.append((char)i.read());} catch(Exception ex) {return "";}
  flog=flog+"<<"+buf.toString();
  return buf.toString();
}

public static int wstr(String s) {
// запись строки в выходной поток
  try{
    byte[] b = s.getBytes();
    o.write(b);
    o.flush();
    flog=flog+">>"+s;
    return 0;
  }catch(Exception ex) {return -1;}
}

///////////////////////////////////////////////////////////////

private static boolean check(String s,String ok,String msg) {
// проверяем код который вернул сервер.
  answer = msg+": "+s;
  if (s == null || !s.trim().startsWith(ok)) return false;
  return true;
}

public static String ftplog() {
// отдать накопившийся лог
  String s = flog;
  flog="";
  return s;
}

public static String ftpopen(String hostport, String login, String pass) {
// установить FTP-соединение
  flog = "";
  if (socketopen("socket://"+hostport) != 0) {flog="Error FTP connection: "+hostport; return flog;}
  if (!check(rstr(), "220", "server not answer")) return answer;
  wstr("USER " + login + (char)13 + (char)10);
  if (!check(rstr(), "331", "user-login")) return answer;
  wstr("PASS " + pass + (char)13 + (char)10);
  if (!check(rstr(), "230", "password")) return answer;
  return "OK";
}

public static void ftpclose() {
// закрыть FTP-соединение
  wstr("QUIT" + (char)13 + (char)10);
  socketclose(); 
}

public static String ftpsendstr(String fileName, String data) {
// передать файл на FTP
  SocketConnection dataSocket = null;
  OutputStream    dataStream = null;
  String[] params = {"","","","","",""};
  String url  = "";
  wstr("REST 0"+ (char)13 + (char)10);
  if (!check(rstr(), "350", "REST")) return answer;
  wstr("TYPE I" + (char)13 + (char)10);
  if (!check(rstr(), "200", "TYPE I")) return answer;
  wstr("PASV" + (char)13 + (char)10);
  if (!check(url= rstr(), "227", "PASV")) return answer;
  int n = 0;
  int endparams=url.indexOf(")");
  for (int i=url.indexOf("(")+1; i<endparams; i++) {
    if (url.charAt(i) != (char)44) {params[n] = params[n]+url.charAt(i);}
      else {n++;}
  } 
  url="socket://"+params[0]+"."+params[1]+"."+params[2]+"."+params[3]+":"+Integer.toString(256*Integer.parseInt(params[4]) + Integer.parseInt(params[5]));
  flog=flog+"CONNECTING TO: "+url+(char)13 + (char)10;
  try{
    dataSocket = (SocketConnection) Connector.open(url);
    dataStream = dataSocket.openOutputStream();
  }catch(Exception ex) {}
  wstr("STOR " + fileName + (char)13 + (char)10);
  if (!check(rstr(), "125", "STOR")) return answer;  //"150"
  try{
    byte[] b = data.getBytes();
    dataStream.write(b);
    dataStream.flush();
  }catch(Exception ex) {}
  try{
    dataSocket.close();
    dataSocket = null;
    dataStream.close();
    dataStream = null;
  }catch(Exception ex) {}
  if (!check(rstr(), "226", "file transfer")) return answer;
  return "OK";
}

}


AVIZO 22.04.2009 13:40

Ответ: Lib_FTP
 
А у меня при попытке создать файл на ФТП выдает ошибку 501. Коннект проходит нормально :(

ViNT 22.04.2009 19:18

Ответ: Lib_FTP
 
Из RFC 959:
501 Syntax error in parameters or arguments.

Похое, неправильно заданы параметры для комманды создания файла.

AVIZO 22.04.2009 21:52

Ответ: Lib_FTP
 
Цитата:

Сообщение от ViNT (Сообщение 103660)
Из RFC 959:
501 Syntax error in parameters or arguments.

Похое, неправильно заданы параметры для комманды создания файла.

Это я в курсе.
Да я пытаюсь запустить пример, который идет в нагрузку. Перепробовал 3 ФТПшника.

abcdef 12.05.2009 12:45

Ответ: Lib_FTP
 
Вложений: 1
подсмотрел как сделана работа с FTP-серверами в программке "Moto FTP" jenfa (c).
Вот декомпиленный класс для работы с FTP в пассивном режиме.

cherepets 04.01.2010 15:11

Ответ: Lib_FTP
 
у кого-нибудь получилось разобраться с либой?
у меня всегда 501((( и когда создаем файл, и когда в уже существующий писать пытаемся...

abcdef 19.01.2010 11:06

Ответ: Lib_FTP
 
Цитата:

Сообщение от cherepets (Сообщение 132173)
у меня всегда 501

откомпиль правленный исходник, сообщение №4 от 02.01.2009, 16:22

cherepets 19.01.2010 11:14

Ответ: Lib_FTP
 
я б откомпилил, ток у меня ява не ставится, все пакеты требуют какой-то еще пакет, а в репозитарии его нет(((

Trazzy 20.01.2010 06:42

Ответ: Lib_FTP
 
Вложений: 1
cherepets, держи свежеиспеченный Lib_ftp из 4го поста (от 02.01.2009, 15:22)...

cherepets 20.01.2010 13:26

Ответ: Lib_FTP
 
о, пасиб)))
правда я уже без него обошелся, но все же фтп никогда не помешает)))

Trazzy 24.01.2010 23:28

Ответ: Lib_FTP
 
пожалуйста)))... ешь без хлеба :-D

Sehnsucht_1 23.07.2010 09:59

Ответ: Lib_FTP
 
к FTP подключается, файл создаётся но строка в него не записывается, файл пустой :( Сервер возвращает 150


Часовой пояс GMT +4, время: 02:29.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
Перевод: zCarot