Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.09.05;
Скачать: CL | DM;

Вниз

Посылка 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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.021 c
1-14110
Filat
2002-08-21 14:50
2002.09.05
CreateFile и WriteFile?


1-14059
Korona
2002-08-26 22:45
2002.09.05
Вопрос по TMenuItem


3-13948
Muskellunge
2002-08-16 09:51
2002.09.05
Экспорт локальных DBF-файлов в файлы баз данных InterBase


1-14078
***
2002-08-27 10:33
2002.09.05
InstallShield


1-14040
Андрусь
2002-08-25 14:38
2002.09.05
Подскажите функцию сравнения двух указателей на real