Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2002.10.03;
Скачать: [xml.tar.bz2];

Вниз

Помогите с передачей файлов.   Найти похожие ветки 

 
Ernie   (2002-07-08 01:27) [0]

Подскажите пожалуйста как передавать файлы по локальной сети от одного компьютера к другому, любыми способами (по UDP или с помощью сокетов). Причем файлы обычно > 5 Мбайт. Если можно с примером. Заранее благодарен.
Ernest.


 
Velocity   (2002-07-08 06:23) [1]

с UDP муторно, используй сокеты, там таких проблем не должно возникнуть. технически сокет может передать Cardinal-байт, а это довольно много.


 
Ghost.   (2002-07-08 09:08) [2]


> Velocity (08.07.02 06:23)
> с UDP муторно, используй сокеты, там таких проблем не должно
> возникнуть. технически сокет может передать Cardinal-байт,
> а это довольно много.

Никакой разници нет, по UDP точно также отлько гарантии получения не будет


 
Velocity   (2002-07-08 10:15) [3]

Да не, я ниче против UDP не имею. Просто сокеты удобней. ;-) хотя кому как.


 
Ernie   (2002-07-09 00:01) [4]

Ну понятно, сокеты это хорошо, только как именно все это сделать? То есть отправку и полечние файла? Размеры файлов будут от 5 до 50 Мбайт, а UDP у меня даже сообщение больше 2 Кбайт послать не может :( .


 
Ghost.   (2002-07-09 09:04) [5]

Ленивая у тебя UDP..в ФАКе есть пример под UDP его переделать можно легко (ну и от используемых компонентов зависит остальное)


 
Velocity   (2002-07-10 10:30) [6]

Гм. честно говоря потому я с UDP и не рекомендую работать. у меня нормально отправлялся блок только в 1024 байта, не более. да мне и не очень хотелось ковыряться далее. ну если с сокетами пример нужен - пиши, вышлю. хотя странно, я простейший пример выкидывал на ентот сайт - сам теперь найти не могу. и поиск молчит как рыба об лед.


 
eastwood   (2002-07-10 10:48) [7]

Угу
Поиск слабовать как то. Не в обиду будет сказано


 
Ernie   (2002-07-11 02:07) [8]

2Velocity:
Очень буду благодарен если вышлеш примерчик на мыло (ernie@ua.fm). Задача проста - просто передовать файлы по локалке (типа как в NetMeeting"e, токо это не подходит, так как NetMeeting прога ужасно глючная, часно при включении виснет..).
Заранее благодарен.


 
MrBeer   (2002-07-19 00:40) [9]

Ernie:
bred.
1) razmer UDP paketa po standartu do 64kb, esli router nastroili tak chtobi ne propuskatj takoi razmer eto drugoi vopros.
2) razdelenie na "sockets" i "UDP" nepravilno, t.k. protokoli TCP i UDP rabotajut cherez sockets.
3) Po lokalnoi seti raznica ne bolshaja TCP ili UDP. Protokol UDP + algoritm kotorii boretsja s poterennimi paketami horosho rabotaet v setyah gde bolshoi packet-loss i sootv. TCP stoporitsja.


 
Ernie   (2002-07-28 02:47) [10]

2 MrBeer

1) Даже если размер пакета 64 Кбайт, то все равно это мало, у меня отправляются файлы от 5 до 50 Мбайт... Хотя у меня больше 2 Кбайт отправить не выходило.
2,3) Мне все-равно что использовать TCP или UDP, мне главное чтоб работало. Если можно то маленький примерчик как такое можно реализовать, с помощю любых методов итли компонент.


 
cyborg   (2002-07-28 09:02) [11]

Бери сокеты и отправляй по частям либо в потоке.


 
Ernie   (2002-07-28 18:56) [12]

2 cyborg

Да, но как это зделать??? Можно примерчик??? Хотя бы какой-то, маленький, но работающий :)
Заранее благодарен.


 
cyborg   (2002-07-29 06:40) [13]

Ernie вы по форуму бы полазили. Уже как минимум раз 10 по этому поводу был разговор.
Если в потоке делать, получателю передаёте код, что сейчас будет файл передаваться, его название и размер, затем передаёте сам файл. Можно для надёжности контрольную сумму передать и т.д.


 
Ernie   (2002-07-30 00:53) [14]

2cyborg

Я лазил часа так 3-4, но ничего так и не нашел :(( Поиск вообще ничего не находит, в FAQ"e такого нету... Очень надо, помогите плз. примером.

Заранее благодарен.


 
cyborg   (2002-07-30 08:50) [15]

До передачи файлов у меня ещё не доходило, но теория такая:
Если вы не работали с потоками, то вам не поможет.
Создаёте список констант(команд), открываете сокет, перед каждой отправкой чего нибудь посылаете соответствующую команду (константы для этого созданы) получатель получает данную команду и обрабатывает её, например если это команда на передачу файла, у пользователя нужно спросить хочет ли он получить данный файл, если отказ, то посылателю отправляется команда на отказ, если разрешено, то выбрать папку куда это дело сохранять.
Для передачи сначало придумайте как данные будут передаваться, команды передачи и форматы передачи данных.
А код мне в лом писать.
А если вы не знаете как вообще передать данные через сокет, то лезьте в справку, в демо примеры и в исходные тексты сокетов.
Ну а если вы и в исходных текстах не понимаете, то вам уже ничего не поможет, только хорошая книга по Паскалю и Дельфи.


 
Ernie   (2002-07-30 21:46) [16]

Все это есть кроме САМОЙ передачи файла. Точнее файла с размером болше 2 Мбайт...


 
Beglec   (2002-07-31 10:34) [17]

Недавно встретился с такой же проблемой.... задавал много вопросов, но никто так и неответил вразумительного ответа.
Все только и дело что говорят смотри литературу. Непонятно мне такое отношение.
Вот читая данную проблему решил помочь.

1. TCP или UDP протокол разницы в удобстве нет, но есть разница в качестве и скорости.
UDP - быстрее, но менее надежнее.
TCP - Медленнее, но надежный. Но в наше время скоростей TCP - самый оптимальный протокол


Если отправляешь только один файл то практически нет проблем.

в сервере делаешь просто
Определяешь переменную
var Files: TFileStream;
begin
Files:=TFileStrea.Create("name_file",fmOpenRead);
Socket.SendStream(Files);
end;
- на сервере этого достаточно.

для клиента нужен цикл
procedure TFMain.ClientRead(Sender: TObject; Buf: Char; var DataLen: Integer);
var SQL : integer;
bytes : array[1..1048] of byte;
SDFile : TFileStream;
begin
SQL:=1;{если программа попапла в данную процедура, значит что то есть в буфере}
Files:=TFileStrea.Create("name_file",fmOpenRead); {создать файл}
While SQL>0 do {выполнять прием данных из буфера пока есть чтолибо в нем}
begin
SQL:=Socket.ReceiveBuf(bytes,1024); {прочитать 1 КБ из буфера и запомнить в SQL сколько байт действительно прочитано}
SDFile.Write(bytes,SQL); //записать в файловый поток
if SQL<1024 then Break; //если конец потока то закончить цикл
end;
end;

Вся информация поступившая через сокет будет хранить в файле "name_file"


 
Ernie   (2002-07-31 21:16) [18]

2 Beglec

Спасибо большое. Наконец хоть кто-то ответил нормально. Только вопросик: Оно работать будет если размер файла > 1 Кбайта??? (Просто сейчас нету возможности самому проверить).

Заранее благодарен.


 
Dennis S   (2002-08-01 23:53) [19]

Присоединяюсь...
Thanks to Beglec! :)

А то сам уж хотел спрашивать...



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2002.10.03;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.008 c
14-8115
Anatoly Podgoretsky
2002-09-07 03:15
2002.10.03
Что нового в Delphi 7


1-8045
Itap
2002-09-22 15:58
2002.10.03
Быстрый поиск в RichEdit


4-8214
Soft
2002-08-16 14:04
2002.10.03
Завершился ли Thread или нет?


1-7899
mmb
2002-09-19 18:45
2002.10.03
Почему не получается запустить процессы друг задругом с ожиданием


7-8188
REL_
2002-07-26 10:12
2002.10.03
Серийный номер винчестера





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский