Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Oracle |
![]() ![]() |
анонимус
Guest |
есть вот такой пакет http://www.oracle-base.com/dba/Script.php?category=miscellaneous&file=ftp.pkb там процедура -- -------------------------------------------------------------------------- PROCEDURE list (p_conn IN OUT NOCOPY UTL_TCP.connection, p_dir IN VARCHAR2, p_list OUT t_string_table) AS -- -------------------------------------------------------------------------- l_conn UTL_TCP.connection; l_list t_string_table := t_string_table(); l_reply_code VARCHAR2(3) := NULL; BEGIN l_conn := get_passive(p_conn); send_command(p_conn, 'LIST ' || p_dir, TRUE); BEGIN LOOP l_list.extend; l_list(l_list.last) := UTL_TCP.get_line(l_conn, TRUE); debug(l_list(l_list.last)); IF l_reply_code IS NULL THEN l_reply_code := SUBSTR(l_list(l_list.last), 1, 3); END IF; IF SUBSTR(l_reply_code, 1, 1) IN ('4', '5') THEN RAISE_APPLICATION_ERROR(-20000, l_list(l_list.last)); ELSIF (SUBSTR(g_reply(g_reply.last), 1, 3) = l_reply_code AND SUBSTR(g_reply(g_reply.last), 4, 1) = ' ') THEN EXIT; END IF; END LOOP; EXCEPTION WHEN UTL_TCP.END_OF_INPUT THEN NULL; END; l_list.delete(l_list.last); p_list := l_list; utl_tcp.close_connection(l_conn); get_reply (p_conn); END; -- -------------------------------------------------------------------------- хотелось бы разобраться как это работает например - зачем написано вот это IF SUBSTR(l_reply_code, 1, 1) IN ('4', '5') THEN если имя файла начинается с символа '4' или '5' - выдать ошибку ? (на это я и напоролся) |
4 май 09, 15:19 [7143073] Ответить | Цитировать Сообщить модератору |
miksoft Member Откуда: Сообщений: 38632 |
|
||
4 май 09, 15:23 [7143100] Ответить | Цитировать Сообщить модератору |
miksoft Member Откуда: Сообщений: 38632 |
сходите на ftp-сервер обычным консольным клиентом и посмотрите своими глазами что там реально передается. |
4 май 09, 15:26 [7143124] Ответить | Цитировать Сообщить модератору |
Между сообщениями интервал более 1 года. |
sworn Member Откуда: Point of no return Сообщений: 127 |
Добрый вечер! Видимо с вопросом этим надо было в сисадминские ареалы подаваться. Но в итоге из Окасла надо выйти на FTP( на данный момент хотя бы список файлов получить), делаю так:
, все идет по плану, но на команде list вешается в ожидание и ответ от сервера не доходит. Сознаюсь, с винды с telnet-а лучшего результата не добился(получаю ответ 425), но с любого ftp клиента все без проблем. Следовательно, и из БД та же история:( С сетями туго, посему прошу совета. |
|
15 дек 11, 18:52 [11774167] Ответить | Цитировать Сообщить модератору |
sworn Member Откуда: Point of no return Сообщений: 127 |
|
||
15 дек 11, 18:54 [11774171] Ответить | Цитировать Сообщить модератору |
MazoHist
Guest |
Особенность работы FTP в пассивном режиме в том, что данные он будет отдавать на другом порту. вот логи телнета
После команды PASV нужно открыть вторую сессию на тот же адрес, на определенный порт. В ответе команды последние 2 числа обозначают порт, на который нужно соединяться за данными. Для его определения нужно первое число умножить на 256 и прибавить второе. После завершения команды соединение на втором порту закрывается. Это если интересно как работает. А так можно посмотреть тынц |
||
15 дек 11, 19:05 [11774211] Ответить | Цитировать Сообщить модератору |
miksoft Member Откуда: Сообщений: 38632 |
sworn, В FTP-протоколе передача файлов и результатов команды list проивзодится в отдельном TCP-коннекте, который инициируется или сервером (активный режим), или клиентом (пассивный режим). См. http://ru.wikipedia.org/wiki/FTP |
15 дек 11, 19:06 [11774220] Ответить | Цитировать Сообщить модератору |
sworn Member Откуда: Point of no return Сообщений: 127 |
miksoft,MazoHist , огромное спасибо ! более чем доходчиво |
15 дек 11, 19:36 [11774416] Ответить | Цитировать Сообщить модератору |
Все форумы / Oracle | ![]() |