Способы передачи файлов по сети. Кроссплатформенно.

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Re: Способы передачи файлов по сети. Кроссплатформенно.

Сообщение Brainenjii » 07.06.2012 22:35:44

http://pastebin.com/eUzgHrRc - комментарии к серверу
http://pastebin.com/PjHqQfYN - комментарии к клиенту
ГЗВ: не надо никаких компонент... просто скомпильте два исходника (создайте проект как программу(program), а не как приложение(application)) и второй (клиент) запустить как <clientname> PUT /path/to/file.
UPD2: на Windows не проверялось...но если файл лежит рядом с бинарником - проблем быть не должно...
Аватара пользователя
Brainenjii
энтузиаст
 
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

Re: Способы передачи файлов по сети. Кроссплатформенно.

Сообщение veresk » 08.06.2012 07:59:12

Так ты их консольными набабахал, вот оно чо..
veresk
новенький
 
Сообщения: 48
Зарегистрирован: 31.01.2012 12:23:32

Re: Способы передачи файлов по сети. Кроссплатформенно.

Сообщение B4rr4cuda » 10.06.2012 00:05:37

Я буду неожиданно банальным, но почему не сделать небольшой вебсервер, который будет отдавать файлы?
Берем synapse и его пример http сервера, правим функцию ProcessHttpRequest, в самое начало которой вставляем что-то подобное:
Код: Выделить всё
if (request = 'GET') then begin
    vWebPath:=FWebPath+ReplaceString(uri,'/',PathDelim);

    AddLog('GET:'+vWebPath);

    if FileExists(vWebPath) then begin
      fs:=TFileStream.Create(vWebPath,fmOpenRead);
      try
        OutputData.LoadFromStream(fs);
        result := 200;
      finally
        FreeAndNil(fs);
      end;
    end else result := 404;

  end;
Аватара пользователя
B4rr4cuda
энтузиаст
 
Сообщения: 693
Зарегистрирован: 28.12.2007 07:48:35

Re: Способы передачи файлов по сети. Кроссплатформенно.

Сообщение alexey38 » 10.06.2012 16:58:19

Когда требуются такие простые действия, как передача файла, то низкоуровневые технологии (сокеты) бывают проще, чем нагромождение высокоуровневых. FTP, HTTP - нужно, если нужна работа через инет. Расшаренные папки (типа самбы) - это не ради одного файла. Если в рамках системы есть файловый сервер, то можно его использовать, если нет, то городить не зачем. SQL сервер - это СУБД, для работы со структурированными данными, но никак не ради бинарников.

Работа с сокетами простая. Нюансы можно смотреть на форумах, или смотреть исходники компонентов их использующих.
alexey38
долгожитель
 
Сообщения: 1627
Зарегистрирован: 27.04.2011 19:42:31

Re: Способы передачи файлов по сети. Кроссплатформенно.

Сообщение vitaly_l » 10.06.2012 17:28:15

alexey38 писал(а):Когда требуются такие простые действия, как передача файла, то низкоуровневые технологии (сокеты) бывают проще, чем нагромождение высокоуровневых.

А в чём разница??? Что там, что здесь - файлы передаются одинаково, частями... B4rr4cuda - предлагает более оптимальный вариант...
Последний раз редактировалось vitaly_l 10.06.2012 17:40:20, всего редактировалось 1 раз.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: Способы передачи файлов по сети. Кроссплатформенно.

Сообщение B4rr4cuda » 10.06.2012 17:34:53

alexey38 писал(а):Когда требуются такие простые действия, как передача файла, то низкоуровневые технологии (сокеты) бывают проще, чем нагромождение высокоуровневых.

Смотря какая задача.. у нас недавно задача была сделать систему автообновления для комплекса программ, мои коллеги, ответственные за проект тоже решили использовать "низкоуровневые технологии".. в результате они наваяли велосипед, создали целый протокол взаимодействия и потом огребли проблем при сопровождении.. Им пришлось поддерживать версионность самого протокола, ибо вылезали проблемы при взаимодействии, получили гемморой в разработке и сделали в результате некий аналог вебсервера..
К чему я веду - если задача простая - передача одного файла, то вебсервер не имеет смысла.. Если же планируется более сложное взаимодействие - то почему бы и нет? Протоколы отлаженые, методики проверенные..
Аватара пользователя
B4rr4cuda
энтузиаст
 
Сообщения: 693
Зарегистрирован: 28.12.2007 07:48:35

Re: Способы передачи файлов по сети. Кроссплатформенно.

Сообщение alexey38 » 10.06.2012 18:17:33

vitaly_l писал(а):А в чём разница??? Что там, что здесь - файлы передаются одинаково, частями... B4rr4cuda - предлагает более оптимальный вариант...


Любые технологии передачи по сети используют сокеты.

Нужно отличать прикладную программу и технологии. Если в компании есть веб, фтп или файл сервер, то их можно и надо использовать. Тогда программа клиентская и серверные программы должны быть длиной в несколько строк.
Если этого нет, или они для других целей, то написать программу на сокетах - это несколько десятков строк. Если решение корпоративное, то смена внутреннего протокола, это не проблема, перекомпилировать клиента и сервера и разом заменить все программы.
alexey38
долгожитель
 
Сообщения: 1627
Зарегистрирован: 27.04.2011 19:42:31

Re: Способы передачи файлов по сети. Кроссплатформенно.

Сообщение vitaly_l » 10.06.2012 18:38:04

Сомневаюсь, что в задаче будет ежесекундный обмен файлами по 700Мб... Соответственно B4rr4cuda - предложил более оптимальное и надёжное (проверенное) решение, которое вернёт HTTP-500. (Хотя на самом деле - без разницы...)
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: Способы передачи файлов по сети. Кроссплатформенно.

Сообщение B4rr4cuda » 10.06.2012 19:16:51

alexey38 писал(а):Если решение корпоративное, то смена внутреннего протокола, это не проблема, перекомпилировать клиента и сервера и разом заменить все программы.

Вот в разовой замене всех программ обычно и начинается затык)) Особливо, если это сеть филиалов, расположенных в разных городах, в разных часовых поясах (что ведет к различным рабочим часам).. В подобной ситуации смена внутреннего протокола - это не просто проблема, это просто праздник геммороя, какой-то. Потому и нужна либо обратная совместимость протокола, либо использование уже отлаженного..
Аватара пользователя
B4rr4cuda
энтузиаст
 
Сообщения: 693
Зарегистрирован: 28.12.2007 07:48:35

Re: Способы передачи файлов по сети. Кроссплатформенно.

Сообщение alexs » 11.06.2012 00:39:06

alexey38 писал(а): Если решение корпоративное, то смена внутреннего протокола, это не проблема, перекомпилировать клиента и сервера и разом заменить все программы.

Явно эти строки пишет человек, который не работал в крупной компании, не говоря уже о корпорациях.
Не надо изобретать велосипеды (в самом плохом смысле слова) там, где есть хорошо отлаженные решения.
Лучше сконцентрируйте свои усилия на бизнес логике вашего приложения.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4064
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Способы передачи файлов по сети. Кроссплатформенно.

Сообщение vitaly_l » 11.06.2012 08:14:28

alexs писал(а):Не надо изобретать велосипеды (в самом плохом смысле слова) там, где есть хорошо отлаженные решения.

Не согласен. т.к. велосипеды - нужно изобретать всегда и везде... иначе изобреталка заржавеет... Посему: Согласитесь что, Сокеты, это как и HTTP,FTP итп - тоже, хорошо отлаженные решения и их естественно достаточно для обмена файлами т.к. это база для HTTP и FTP... :cry:
Нет безапелляционных аргументов в пользу: FTP или HTTP или сокетов... :roll: Поэтому без разницы, что использовать т.к. скорость передачи одинакова. Однако: протоколы... - перевешивают в сторону HTTP и FTP. :cry:
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: Способы передачи файлов по сети. Кроссплатформенно.

Сообщение Mr.Smart » 11.06.2012 09:59:14

vitaly_l бред :facepalm:
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Способы передачи файлов по сети. Кроссплатформенно.

Сообщение vitaly_l » 11.06.2012 11:48:08

Mr.Smart писал(а):facepalm

Бред... facepalm... :roll: Я художник - мне можно... :cry:

Истина в аргументах... Мои аргументы взяты из ответов в данном топике...
Одни говорят: хорошо, то что слева, другие говорят, хорошо то, что справа...
Я говорю, что без разницы... т.к. результат идентичен, но соглашаюсь что, ЛУЧШЕ - использовать более проверенные решения. :wink:
:arrow: Бред? facepalm?


.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: Способы передачи файлов по сети. Кроссплатформенно.

Сообщение Ism » 11.06.2012 14:15:55

Вообще я не понимаю, в чем прикол. Сделайте все через ftp, а легко настраиваемых ftp серверов много. Программе клиенту должно быть все равно. Если вы хотите шифровать, то с сокетами будет большой геморрой. Зато многие ftp сервера работают по sftp
Кроме того есть OpenSSH , он тоже умеет передавать файлы. Для общения по sftp подойдет curl и wget (правда не проверял), они компактны и их можно впихнуть в дистрибутив клиента

То, что вы хотите сделать, чтоб программа сама была сервером с точки зрения антивируса опасно.

http://www.nulled.cc/threads/150554/

Добавлено спустя 6 минут 54 секунды:
http://spiritus.external.vkontakte.anti ... st/133703/

Добавлено спустя 1 минуту 25 секунд:
Авторизация на сайтах из bash с помощью curl
http://blog.elve.name/?p=104

Все это кроссплатформенно

http://curl.haxx.se/download.html
Ism
энтузиаст
 
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Re: Способы передачи файлов по сети. Кроссплатформенно.

Сообщение vitaly_l » 11.06.2012 14:32:51

Ism писал(а):чтоб программа сама была сервером с точки зрения антивируса опасно

А в чём опасность, если сервер программа??? и какая разница?! (по мне, так: любой сервер - программа...) :cry:
(в остальном - это третье решение, задачи и все идентичны...)
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Пред.След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 234

Рейтинг@Mail.ru