Форум: "Сети";
Текущий архив: 2002.09.05;
Скачать: [xml.tar.bz2];
ВнизПосылка jpg через UDP Найти похожие ветки
← →
neodiX (2002-06-12 19:51) [0]Всем привет!
Проблема такая: нужно переслать 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-06-12 23:38) [1]А чем тебе не нравиться TCP? Проблема что УДП имеет ограничение на размер пакета, так что произвольную катринку все-равно не пошлеш, а собирать самому, имхо это изврат. Проще по ТСП и работаешь как с поток - никаких проблем. Я так посылал картинку больше метра, и нормально
← →
neodiX (2002-06-13 18:10) [2]>SerVs
Понимаешь, мне надо эту картинку (в моем случае изображение) не одному компу посылать, а нескольким (для этого лучше всего broadcast). Причем все это должно происходит как можно быстрее.
P.S. Sorry, тэг фигово закрыл.
← →
neodiX (2002-06-20 20:17) [3]Мастера! Неужели это так сложно?
← →
Мороз Павел (2002-06-28 16:45) [4]А может надо не так
>m.Write(adata,adata.Size);
а так
m.CopyFrom(AData, AData.Size)
?
Сам не пробовал.
← →
SerVS (2002-07-01 14:48) [5]neodiX ©
Ты мой ответ внимательно читал?
ТСР! Сделай того кто шлет сервером, пусть они к нему конектяться и скачивают. А вот уведомления о том что что-то изменилось можешь кидать по удп
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2002.09.05;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.022 c