Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.11.2010, 22:48   #1
SoftKoc
Форумчанин
 
Аватар для SoftKoc
 
Регистрация: 07.11.2009
Сообщений: 218
Восклицание Передавать большие файлы через IdUDP

Здравствуйте!
Подскажите пожалуйста как можно передавать большие файл по сети с помощью компонента IdUDP.
Может как-то частями или как?

Я передаю вот таким образом:

Код:
procedure TForm1.Button2Click(Sender: TObject);
Var
 M: TMemoryStream;
begin
 IdUDPClient1.Host:=Edit2.Text;
  M:=TMemoryStream.Create;
   M.LoadFromFile(Edit1.Text);
    Label2.Caption:=IntToStr(M.Size);
   IdUDPClient1.SendBuffer(M.Memory^, M.Size);
  M.Free;
end;
А получаю вот таким:
Код:
procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
  ABinding: TIdSocketHandle);
Var
 M: TMemoryStream;
 SizeBuffer: Integer;
begin
 M:=TMemoryStream.Create;
  M.CopyFrom(AData, AData.Size);
  M.SaveToFile('D:\1.jpeg');
 M.Free;
end;
И по моему этот код не совсем рабочий
Я бы изменил мир, но Бог не дает исходников...
Если помог, нажми на весы и поставь плюс - в знак благодарности
SoftKoc вне форума Ответить с цитированием
Старый 15.11.2010, 00:05   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

вспомним что UDP протокол допускает потерю пакетов.
и подумаем, годится ли он для передачи файлов?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 15.11.2010, 14:30   #3
SoftKoc
Форумчанин
 
Аватар для SoftKoc
 
Регистрация: 07.11.2009
Сообщений: 218
По умолчанию

А что вы тогда посоветуете, что луче использовать?
Я бы изменил мир, но Бог не дает исходников...
Если помог, нажми на весы и поставь плюс - в знак благодарности
SoftKoc вне форума Ответить с цитированием
Старый 15.11.2010, 16:17   #4
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Цитата:
Сообщение от SoftKoc Посмотреть сообщение
А что вы тогда посоветуете, что луче использовать?
TCP ?
BOBAH13 вне форума Ответить с цитированием
Старый 15.11.2010, 16:19   #5
SoftKoc
Форумчанин
 
Аватар для SoftKoc
 
Регистрация: 07.11.2009
Сообщений: 218
По умолчанию

А можно пример на idTCP - отправки сообщений. И отправки файлов.
Может у кого-то есть выложите пожалуйста.
Я бы изменил мир, но Бог не дает исходников...
Если помог, нажми на весы и поставь плюс - в знак благодарности
SoftKoc вне форума Ответить с цитированием
Старый 17.11.2010, 01:46   #6
SoftKoc
Форумчанин
 
Аватар для SoftKoc
 
Регистрация: 07.11.2009
Сообщений: 218
Восклицание

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
вспомним что UDP протокол допускает потерю пакетов.
и подумаем, годится ли он для передачи файлов?
Я знаю что idUDP не идеален, и теряет пакеты.
Но сейчас мне нужно хотя бы что-то.

Я так понимаю что для того что бы передать большой файл по сети, его нужно передавать по частям.
Для того что бы передать часть файла, эту часть нужно загрузить в TMemoryStream потом передать, после чего загрузить следующею часть и опять передать. Вопрос в другом как это все реализовать?Подскажите пожалуйста
Я бы изменил мир, но Бог не дает исходников...
Если помог, нажми на весы и поставь плюс - в знак благодарности
SoftKoc вне форума Ответить с цитированием
Старый 20.11.2010, 14:05   #7
SoftKoc
Форумчанин
 
Аватар для SoftKoc
 
Регистрация: 07.11.2009
Сообщений: 218
Сообщение

Вот так делаю отправку :
Код:
procedure TForm1.Button1Click(Sender: TObject);
Var
 MS: TMemoryStream;
 I: Integer;
begin
IF OpenDialog1.Execute Then
 Begin
 MS:=TMemoryStream.Create;
 MS.LoadFromFile(OpenDialog1.FileName);
 IdUDPClient1.Host:='127.0.0.1';
 For I:=0 to 10 do
  Begin
   IdUDPClient1.SendBuffer(MS.Memory^, 10000);
   MS.Position:=MS.Position + 10000;
  End;
 MS.Clear;
 MS.Free;
 End;
end;
Почему оно передает только первые 10 кб?
Я бы изменил мир, но Бог не дает исходников...
Если помог, нажми на весы и поставь плюс - в знак благодарности

Последний раз редактировалось SoftKoc; 20.11.2010 в 15:01.
SoftKoc вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
не качает большие файлы LevonNikox PHP 11 30.08.2010 22:36
Как передавать (и через что) файлы? TwiX Работа с сетью в Delphi 5 17.03.2010 16:30
NMPOP3 не загружает большие файлы D@rkD@iver Работа с сетью в Delphi 0 24.02.2010 11:24
Передавать файл через сокет частями NieL Работа с сетью в Delphi 0 08.12.2009 16:42
Возможно ли через ПХП передавать данные между разными сайтами? tunyash PHP 1 31.07.2008 16:26