Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Посылка jpg ;через UDP [D5, D6, Win95/98, NT4, Win2k, WinXP]


neodiX ©   (2002-06-12 19:51:00) 

Всем привет!
Проблема такая: нужно переслать jpg по UDP (я использую инди UDP т.е idUdpClient & idUdpServer). Как я понял инди UDP разрешает за один раз послать 8кб, a мне надо больше, примерно 200кб. Я режу файл на куски и посылаю. Проблема как их (куски) принять и востоновить jpg. В примере ниже я разрезаю файл на две части(файл не превышает 16кб) и посылаю. При получении жду второго пакета, получив нe могу востанавить jpg :(
//------------------------------------------------
var
Form1: TForm1;
i:byte=0;
m:tmemorystream;
procedure TForm1.FormCreate(Sender: TObject);
begin
m:=tmemorystream.Create;
m.Position:=0;
end;
//Посылаю
procedure TForm1.Button5Click(Sender: TObject);
var jpg:tjpegimage;
ms:tmemorystream;
s,a:string;
i,j,y:longint;
begin
jpg:=tjpegimage.Create;
ms:=tmemorystream.Create;
jpg.LoadFromFile("d:\файл.jpg");
jpg.SaveToStream(ms);
i:=ms.Size div 2;
j:=ms.Size-i;
ms.Position:=0;
SetString(S, nil, i);
Ms.Read(Pointer(S)^, i);
SetString(a, nil, j);
Ms.Read(Pointer(a)^, j);
idudpclient1.Send("127.0.0.1",4000,s);
idudpclient1.Send("127.0.0.1",4000,a);
end;
//Принимаю
procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
var a:string;
j:tjpegimage;
begin
memo1.Lines.Add(inttostr(adata.Size));
adata.Position:=0;
inc(i);
m.Write(adata,adata.Size);
if i=2 then begin
j:=tjpegimage.Create;
j.LoadFromStream(m);
image1.Picture.Graphic:=j;
j.Free;
end;
Мастера! Может знаете что я делаю не так, в чем ошибка? Или подскажите как увеличить размер UDP пакета. Короче, любая помощь и советы будут полезны. Заранее всем спасибо за ответы.
П.С. Заметье, на сервере йпг сразу должен отображатся в image1, а не сохраняться в файл. Это очень важно.


SerVS   (2002-07-01 14:48:00) [1]

neodiX ©
Ты мой ответ внимательно читал?
ТСР! Сделай того кто шлет сервером, пусть они к нему конектяться и скачивают. А вот уведомления о том что что-то изменилось можешь кидать по удп


Мороз Павел   (2002-06-28 16:45:00) [2]

А может надо не так
> m.Write(adata,adata.Size);
а так
m.CopyFrom(AData, AData.Size)?
Сам не пробовал.


neodiX   (2002-06-20 20:17:00) [3]

Мастера! Неужели это так сложно?


neodiX   (2002-06-13 18:10:00) [4]

>SerVs
Понимаешь, мне надо эту картинку (в моем случае изображение) не одному компу посылать, а нескольким (для этого лучше всего broadcast). Причем все это должно происходит как можно быстрее.
P.S. Sorry, тэг фигово закрыл.


SerVS   (2002-06-12 23:38:00) [5]

А чем тебе не нравиться TCP? Проблема что УДП имеет ограничение на размер пакета, так что произвольную катринку все-равно не пошлеш, а собирать самому, имхо это изврат. Проще по ТСП и работаешь как с поток - никаких проблем. Я так посылал картинку больше метра, и нормально


Наверх

Титульная страница Поиск, карта сайта Написать письмо