Виталий Якименко
Jul 20 2007, 09:11
Пытаюсь записать файл на сервер по FTP. Соединяюсь с сервером (порт 21), все получается, команды обрабатываются. Но как создать data connection, не разорвав control connection?
SIM300 не дает создать более одного TCP connection... Может, кто пробовал? Или знает где почитать?
стэк у симкомов урезанный односокетный.
если пользуете внешний мк, тогда поднимайте свой стэк на нем и используйте голый гпрс.
только это тянет за собой нормальную ось и прочие радости ...
Виталий Якименко
Jul 20 2007, 12:37
а как быть с командой AT+CIPCCON ?
Там написано:
Note that there may exist two connections at one time: one connection is as
client connecting with remote server, the other connection is as server
Нельзя ли это использовать как-то для FTP ?
Или, каким-то образом "временно" разорвать Control connection, и установить Data connection?
Виталий Якименко
Jul 20 2007, 19:57
Получилось !!!
Могу читать и писать файлы по FTP !
Кому интересно, могу поделиться опытом.
Только не сегодня уже
Есть и вопросы, хотелось бы обсудить.
Какая скорость передачи данных у Вас получилась на больших файлах?
Виталий Якименко
Jul 21 2007, 17:46
Большие не пробовал. Важно, что получилось в принципе. Попробую - напишу.
Konstantin_18
Jul 22 2007, 14:19
Цитата(Виталий Якименко @ Jul 20 2007, 21:57)

Получилось !!!
Могу читать и писать файлы по FTP !
Кому интересно, могу поделиться опытом.
Поделитесь плз.
ув. Виталий Якименко - а на счет поделиться опытом
буду весьма признателен
Виталий Якименко
Jul 22 2007, 14:32
Вот как раз этим сейчас и занимаюсь - пишу файлик. Потерпите немного
Виталий Якименко
Jul 22 2007, 16:13
Расписал все что знаю на данный момент. Если у кого есть больший опыт - поделитесь.
alexey123
Jul 23 2007, 13:58
Цитата(Виталий Якименко @ Jul 22 2007, 20:13)

Расписал все что знаю на данный момент. Если у кого есть больший опыт - поделитесь.
В свое время пробовал использовать GPRS и FTP для перекачки файлов. Впечатления остались не самые лучшие. Если с небольшими файлами (< 300k) дело еще как-то обстоит,
то c большими размерами приходилось совсем туго. Постоянные переповторы, потери блоков...
Пробовал менять клиенты и серверА - без результата.
Если с тех пор (3 года назад, Мегафон-Самара) качество GPRS-связи не улучшилось - ваш клиент потребует серьезных доработок, тестирований и исследований.
Хотя, оригинальности - не отнять
Виталий Якименко
Jul 23 2007, 14:05
Да, для больших файлов, конечно, будут проблемы. Зато, если небольшими порциями - например, результаты измерений - дописывать в файл - очень удобно. В одном TCP пакете можно передавать до 1 кБ - часто вполне достаточно
alexey123
Jul 23 2007, 17:36
Цитата(Виталий Якименко @ Jul 23 2007, 18:05)

Да, для больших файлов, конечно, будут проблемы. Зато, если небольшими порциями - например, результаты измерений - дописывать в файл - очень удобно. В одном TCP пакете можно передавать до 1 кБ - часто вполне достаточно
IMHO ради 1кБ использовать FTP расточительно.
Я бы смотрел в сторону HTTP-POST.
На порядок быстрее и проще в реализации.
Минус один: наличие web-сервера на удаленном хосте.
Виталий Якименко
Jul 24 2007, 07:22
А если надо 1 кБ двоичных данных каждые 8 секунд, и дописывать в один и тот же файл в течение некоторого времени? По-моему, FTP как раз не расточительный - один раз установил соединение, а потом только данные передавай, практически никакого дополнительного трафика.
Если считаете, что HTTP-POST эффективнее - подскажите, как сделать. WEB-сервер на хосте как раз есть.
alexey123
Jul 24 2007, 09:51
Цитата(Виталий Якименко @ Jul 24 2007, 11:22)

Если считаете, что HTTP-POST эффективнее - подскажите, как сделать. WEB-сервер на хосте как раз есть.
POST - немного другая технология. В HTTP есть два основных метода - Get и Post. Тыкая по ссылкам в браузере вы выполняете Get-запросы. Нажимая кнопку "отправить" в этом форуме - выполняете Post-запрос, параметры которого (набранное сообщение, к примеру) передаются в cgi-скрипт на сервере. Это если упрощенно.
Как сделать?
Для этого надо почитать какой нибудь "HTTP для чайников" (я читал именно такую), и иметь под рукой RFC (можно этот
http://www.faqs.org/rfcs/rfc2068.html)Устанавливаете TCP-соединение средствами SIM300 и отправляете POST-запрос.
Виталий Якименко
Jul 24 2007, 09:57
Спасибо, почитаю, попробую. Но это ж еще скрипт писать надо на сервер. И опять же, будут вопросы, если данные не текст, а двоичные.
alexey123
Jul 24 2007, 10:47
Цитата(Виталий Якименко @ Jul 24 2007, 13:57)

Но это ж еще скрипт писать надо на сервер.
Предполагаю, что проблема возникнет не с написанием самого скрипта, а с его размещением на чужом сервере. Хотя, если вам открыли доступ по FTP - могут и со скриптом помочь, наверное.
А скриптовое программирование открывает широкие двери для дальнейшей обработки вашей информации. Можно классифицировать ее на этапе приемки, сваливать на MySQL, строить на ее основе динамические страницы и крутить их на этом-же сервере...
Определенно сюда надо идти.
Цитата(Виталий Якименко @ Jul 24 2007, 13:57)

И опять же, будут вопросы, если данные не текст, а двоичные.
Двоичные данные или текст - протоколу без разницы. В запросе есть поле content_type...
Виталий Якименко
Jul 24 2007, 13:14
За подсказки спасибо. В принципе, есть две задачи - в одной из них нужны просто файлы, темп записи около 1 кБ каждые 8 сек. Думаю, здесь лучше FTP. В другой задаче - объем меньше, но и MySQL может пригодиться, и динамические страницы для визуализации.
А с размещением скрипта проблемы нет - если на сервере хостится сайт, там есть и WEB-сервер, и скрипты, и FTP, и MySQL...
bullit
Jul 27 2007, 16:27
Цитата(Виталий Якименко @ Jul 23 2007, 20:05)

Да, для больших файлов, конечно, будут проблемы. Зато, если небольшими порциями - например, результаты измерений - дописывать в файл - очень удобно. В одном TCP пакете можно передавать до 1 кБ - часто вполне достаточно
А вы пробывали
дописывать файл?
У меня Wavecom модем. Дописывать файл не возможно на серваке, всё в этом файле переписывается, новой информацией.
Думаю тут мало зависит от ftp сервака, самого.
Виталий Якименко
Jul 27 2007, 17:10
Специально сейчас проверил. Да, именно дописываю, командой APPE протокола FTP. Прекрасно дописывает. Если пользоваться командами FTP, то все зависит от FTP-сервера, от модема практически ничего - он просто передает команды.
Может быть Вы используете не команды FTP в "чистом" виде, а реализацию FTP, которая есть в модемах Wavecom? Тогда вопросы к модему, или к тому, как Вы с ним работаете...
Цитата(Виталий Якименко @ Jul 22 2007, 19:13)

Расписал все что знаю на данный момент. Если у кого есть больший опыт - поделитесь.
Здравствуйте!
Пробовал писать на FTP по Вашей методике, но не получается, потому что в ответ на команду port сервер отвечает - "500 Illegal PORT command", может ли такое быть, что сервер не поддерживает команду port? И как в этом случае поступать?
Виталий Якименко
Aug 16 2007, 09:57
Цитата(Ujin @ Aug 16 2007, 10:57)

Здравствуйте!
Пробовал писать на FTP по Вашей методике, но не получается, потому что в ответ на команду port сервер отвечает - "500 Illegal PORT command", может ли такое быть, что сервер не поддерживает команду port? И как в этом случае поступать?
напишите, что именно Вы написали в команде PORT
Цитата(Виталий Якименко @ Aug 16 2007, 12:57)

напишите, что именно Вы написали в команде PORT
передавал "PORT 10,10,39,190,7,228"
айпишник свой узнавал как у Вас в статье написано, директорию создать и в нее перейти получилось, а порт никак не получается.
Виталий Якименко
Aug 16 2007, 11:38
Цитата(Ujin @ Aug 16 2007, 14:26)

передавал "PORT 10,10,39,190,7,228"
айпишник свой узнавал как у Вас в статье написано, директорию создать и в нее перейти получилось, а порт никак не получается.
В описании FTP написано:
500 Syntax error, command unrecognized.
This may include errors such as command line too long.
Получается, что он не понимет команду. Либо у Вас в команду вкрался некий символ, которого мы не видим, либо сервер не поддерживает команду PORT
(что было бы странно) .
Я бы попробовал следующее:
- набрать PORT маленькими и большими буквами
- попробовать с другим FTP- сервером.
В принципе, не важно, какой IP Вы укажете в команде PORT - устанавливать Data Connection
FTP-сервер будет только потом, когда получит команду на передачу данных
Цитата(Виталий Якименко @ Aug 16 2007, 14:38)

В описании FTP написано:
500 Syntax error, command unrecognized.
This may include errors such as command line too long.
Получается, что он не понимет команду. Либо у Вас в команду вкрался некий символ, которого мы не видим, либо сервер не поддерживает команду PORT
(что было бы странно) .
Я бы попробовал следующее:
- набрать PORT маленькими и большими буквами
- попробовать с другим FTP- сервером.
В принципе, не важно, какой IP Вы укажете в команде PORT - устанавливать Data Connection
FTP-сервер будет только потом, когда получит команду на передачу данных
маленькими буквами пробовал тоже, попробовал пробелы вставлять после запятой, тогда пишет "501 Invalid number of arguments"
лишнего ничего попадать не должно, набираю в терминале
Виталий Якименко
Aug 16 2007, 13:54
Цитата(Ujin @ Aug 16 2007, 15:11)

маленькими буквами пробовал тоже, попробовал пробелы вставлять после запятой, тогда пишет "501 Invalid number of arguments"
Получается, что при правильном наборе он видит не ошибку в параметрах, а не понимает саму команду. Попробуйте с другим FTP-сервером. Если нет возможности - я Вам могу предложить свой (пишите на E-mail).
B еще - когда входите на FTP-сервер, он пишет приветствие. Напишите мне, что он пишет ?
Цитата(Виталий Якименко @ Aug 16 2007, 14:38)

В описании FTP написано:
500 Syntax error, command unrecognized.
This may include errors such as command line too long.
Получается, что он не понимет команду. Либо у Вас в команду вкрался некий символ, которого мы не видим, либо сервер не поддерживает команду PORT
(что было бы странно) .
Я бы попробовал следующее:
- набрать PORT маленькими и большими буквами
- попробовать с другим FTP- сервером.
В принципе, не важно, какой IP Вы укажете в команде PORT - устанавливать Data Connection
FTP-сервер будет только потом, когда получит команду на передачу данных
Оказывается ему айпишник не нравится - 10.х.х.х ведь зарезервировано для внутренних сетей, пробовал в port писать свой домашний - работает. Но вот только теперь следующая проблема - почему оператор такой айпишник дает на модуль?
сотовые операторы обычно выдают серые ip, осуществляя nat, при этом для ftp должна быть дополнительная поддержка (ибо он передает ip-адреса непосредственно в сообщении).
похоже у вашего оператора нет такой поддержи.
возможные варианты - использовать пассивный режим или же http.
пример пассивного режима:
Код
$ telnet 10.0.0.20 21
Trying 10.0.0.20...
Connected to 10.0.0.20.
Escape character is '^]'.
220 (vsFTPd 2.0.5)
USER guest
331 Please specify the password.
PASS хрен-я-вам-скажу
230 Login successful.
PASV
227 Entering Passive Mode (10,0,0,20,218,140)
STOR aaa
150 Ok to send data.
226 File receive OK.
PASV
227 Entering Passive Mode (10,0,0,20,193,58)
LIST
150 Here comes the directory listing.
226 Directory send OK.
QUIT
221 Goodbye.
Connection closed by foreign host.
в это время в соседней консоли:
Код
$ telnet 10.0.0.20 $((218*256+140))
Trying 10.0.0.20...
Connected to 10.0.0.20.
Escape character is '^]'.
hello
^]
telnet> quit
Connection closed.
$ telnet 10.0.0.20 $((193*256+58))
Trying 10.0.0.20...
Connected to 10.0.0.20.
Escape character is '^]'.
-rw------- 1 1003 1003 19 Aug 16 19:00 aaa
Connection closed by foreign host.
Виталий Якименко
Aug 17 2007, 04:56
Цитата(edo @ Aug 16 2007, 22:10)

возможные варианты - использовать пассивный режим или же http.
C пассивным режимом понятно, но для этого на SIM300 нужно открыть два соединения, а это невозможно. Максимум - это одно как клиент, одно как сервер.
а что вы так http не хотите? по-моему удобнее
Цитата(edo @ Aug 17 2007, 10:51)

а что вы так http не хотите? по-моему удобнее
Это как?
Цитата(edo @ Aug 17 2007, 19:12)

Непоняяятно
А можно человеческим языком, или примером?
что именно непонятно? ставите на сервер апач или ещё что, разрешаете PUT. после коннектитесь через модем на 80 порт и говорите тот самый PUT
Виталий Якименко
Aug 19 2007, 14:01
Цитата(edo @ Aug 17 2007, 10:51)

а что вы так http не хотите? по-моему удобнее
В целом может и удобнее. Но если объем большой, и данные двоичные - насколько это будет удобно через HTTP ?
а какая разница какие данные и каков объем?
кардинальных отличия 2:
- в http данные передаются в том же tcp-соединении, что и команды;
- в http/1.0 каждая команда выполняется в отдельном соединении (что всё равно меньше, чем то же одно соединение для каждой передачи данных в ftp + ещё одно общее соединение для передачи команд). в http/1.1 в одной tcp-сессии можно выполнять несколько команд.
AlexandrY
Aug 19 2007, 18:15
Ну допустим и в HTTP/1.0 можно было держать соединение открытым.
Это делаеться вставкой заголовка: Connection: Keep-Alive
Во вторых, администратор сервера при желании может и для HTTP/1.1 запретить держать долговременные соединения.
В третьих, c помощью HTTP механизмы FTP никак не заменить.
Это и дописывание файлов, и переименование, и удаление, и скачивание по частям, и хождение по директроиям и т.д.
Тем более, что нынче в GSM сетях можно открыть и пассивный и активный FTP.
Цитата(edo @ Aug 19 2007, 19:03)

а какая разница какие данные и каков объем?
кардинальных отличия 2:
- в http данные передаются в том же tcp-соединении, что и команды;
- в http/1.0 каждая команда выполняется в отдельном соединении (что всё равно меньше, чем то же одно соединение для каждой передачи данных в ftp + ещё одно общее соединение для передачи команд). в http/1.1 в одной tcp-сессии можно выполнять несколько команд.
Тимофей
Sep 5 2007, 05:39
Цитата(alexey123 @ Jul 24 2007, 13:51)

POST - немного другая технология. В HTTP есть два основных метода - Get и Post.
Мне интересно у кого нибудь получилось отправить запрос на загрузку html страницы методом Get с помощью SIM 300. Если получилось, то пожалуйста поделитесь опытом!!!
Цитата(Тимофей @ Sep 5 2007, 09:39)

Мне интересно у кого нибудь получилось отправить запрос на загрузку html страницы методом Get с помощью SIM 300. Если получилось, то пожалуйста поделитесь опытом!!!

at+cipstart="tcp","217.16.16.134","80"
OK
CONNECT OK
at+cipsend
> GET
http://caxapa.ru/1.htm?q=qwerty HTTP/1.0
SEND OK
a/
>
SEND OK
HTTP/1.1 200 OK
Date: Fri, 12 Oct 2007 10:05:47 GMT
Content-Type: text/html; charset=windows-1251
Connection: close
Server: Apache
Cache-Control: max-age=0
Expires: Fri, 12 Oct 2007 10:05:47 GMT
qwerty
CLOSED
*antzol*
Dec 12 2007, 10:57
У меня такая проблема:
Есть два gsm-модуля на основе sim300d. Один из них подключен к компу, на котором установлен web сервер apache 2.2.6, ip фиксированный. Нарисовал пару html-страниц. При попытке подключиться к этому серверу браузером всё получается, страница открывается.
Пытаюсь подключиться к этому серверу с помощью второго gsm-модуля at-командами, ничего не выходит. На попытку соединения отвечает:
at+cipstart="tcp","здесь_мой_ip","80"
OK
STATE: TCP CONNECTING
CONNECT FAIL
Пример, который написал IV_K, получается, модуль подключается к сахаре.
В чем может быть загвоздка? Может что-то в настройках сервера?
CADiLO
Dec 12 2007, 11:43
>>>>Пытаюсь подключиться к этому серверу с помощью второго gsm-модуля at-командами, ничего не выходит. На попытку соединения отвечает:
at+cipstart="tcp","здесь_мой_ip","80"
OK
В модулях 300D SST до 12 версии есть ошибка!!!!
При попытке прямо указать некоторые порты модуль тупо их игнорирует, причем проявляется это не на всех операторах.
Например не воспринимались "1080" и "4480" на Билайне.
Если у вас модуль с памятью SST и прошивка 12 или ниже - обновитесь до 13 версии. Прошивки и прошивальщик я выкладывал на форуме.
*antzol*
Dec 12 2007, 13:14
Но тогда, насколько я понимаю, не получилось бы и этого:
Цитата
at+cipstart="tcp","217.16.16.134","80"
OK
CONNECT OK
at+cipsend
> GET
http://caxapa.ru/1.htm?q=qwerty HTTP/1.0
SEND OK
Цитата(CADiLO @ Dec 12 2007, 14:43)

В модулях 300D SST до 12 версии есть ошибка!!!!
CADiLO прав, но только ошибка там другая

, сервер на базе SIM300 не может создать многосокетное соединение, другими словами обслуживать одновременно более одного клиента.
*antzol*
Dec 14 2007, 18:39
Так сервер не использует tcp/ip стек модуля. И с портами в модуле клиента по-моему всё нормально (с сахарой он нормально соединяется)... И сервер работает (html-страницы на нем открываются)...
В общем всё как бы работает, а в итоге ничего не получается...
Цитата(*antzol* @ Dec 14 2007, 21:39)

Так сервер не использует tcp/ip стек модуля
Что-то не пойму я вас, а как же это: "Есть два gsm-модуля на основе sim300d. Один из них подключен к компу, на котором установлен web сервер"? Я так понимаю, что через модуль ваш сайт подключен к инету, а значит tcp/ip стек модуля используется.
*antzol*
Dec 17 2007, 11:24
Нет, не используется. Комп с web сервером использует модуль как обычный модем (чтоб подключиться к инету, набираю телефон *99***1#).
RomanRom
Jun 19 2008, 15:45
Спасибо Виталию за подробно расписанный документ по FTP.
По его методике получается достучаться к серверу, но без регистрации на нем дальше не пройдешь.
Посоветуйте, какой бесплатный ftp в Инете или Рунете можно использовать (точнее, кто какой использует реально)? Можно ли ориентироваться на сервисы, подобные
http://www.xdrive.com/ и Народ.Яндекс.Диск?
RomanRom
Jun 25 2008, 15:52
Ситуация следующая. Могу войти на сервер и создать файл нулевой длины по методике В.Якименко. Но закачать данные в файл не получается, пробовал с двух серверов. На странице 5 документа после команды at+cipccon=2 на команду at+cipsend ответ ERROR. До этого посылаю команду port xxxxxxxxx и наблюдаю ответ 200 PORT command successful. Может есть какая-то другая последовательность команд или что-то пропущено или где-то надо ждать определенной надписи, потому что на разных серверах разные сообщения.
quarter2
Aug 6 2008, 19:09
К методике В.Якименко добавлю одно уточнение.
at+cipccon=2
OK
Передаем данные
at+cipsend
> text for file 12345
SEND OK
ТЕПЕРЬ (ОБЯЗАТЕЛЬНО!!!) НУЖНО ЗАКРЫТЬ СОЕДИНЕНИЕ: AT+CIPCLOSE
и только после этого давать команду
at+cipccon=1
OK
Ещё одни грабли, на которые я наступил: если по команде at+cifsr
вы не получили адреса типа: 88.214.93.220,
а что-то вроде 10.34.34.65
т.е. начинающиеся с 10 - значит ваш GSM-оператор не способен для СИМ300 обеспечить серверное соединение (только клиентское, т.е. вы можете подсоединиться к кому-то, а к вам никто не сможет) В этом случае нужно менять оператора. Я так и сделал. Теперь работаю с FTP-сервером без проблем.
head_sk
Aug 22 2009, 19:35
А никто не пробывал скачивать файлики с SSH? Как думаете реализуема ли эта затея?
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.