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

Вниз

Протокол Udp   Найти похожие ветки 

 
Keksis   (2003-04-18 15:49) [0]

Пытаюсь переправить по протоколу UDP при помощи компонента NMUDP1 из fastnet изображение рабочего стола сохраненного в формате TBitmap, но видно эта картинка весит больше чем размер передаваемого пакета, как мне передать её в несколько этапов, подскажите плс, если можно примерчик.


 
Snap   (2003-04-18 15:52) [1]

Просто сначала сохранить её где нибудь (можно в памяти) (в прочем в битмапе она и так сохранена, осталось только узнать где. ScanLine попробуй), логичски разбить на куски, и передать, а потом собрать. (На компе которому посылают)


 
Digitman   (2003-04-18 15:55) [2]

http://delphimaster.net/view/6-1050575329/


 
MMF   (2003-04-18 16:25) [3]

На пример, только за качество кода просьба не пинать - пишу как могу.
type TScreenFrame=Record
ID: char;
Size: Integer;
index: byte;
ScreenTime: TDateTime;
Data: array [0..PacketSize-1] of byte;
end;
//отсылка экрана
try
MyStream:=TMemoryStream.Create();
MyJpeg.SaveToStream(MyStream);
MyJpeg.Free;
MyStream.Seek(0, soFromBeginning);
FrameCnt:=0; //счетчик индекса отсылаемой части экрана
ScrFrame.ScreenTime:=ScrTime;
while MyStream.Position<(MyStream.Size-PacketSize+1) do
begin
ScrFrame.ID:="%";
ScrFrame.index:=FrameCnt;
Inc(FrameCnt);
MyStream.ReadBuffer(ScrFrame.Data, PacketSize);
ScrFrame.Size:=PacketSize;
move(ScrFrame, SendBuf, SizeOf(ScrFrame));
NMUDP1.SendBuffer(SendBuf, SizeOf(ScrFrame));
end;
//отсылаем последний кусочек
if MyStream.Position<>MyStream.Size then
begin
ScrFrame.ID:="%";
ScrFrame.index:=FrameCnt+1;
SendSize:=MyStream.Size-MyStream.Position;
MyStream.ReadBuffer(ScrFrame.Data, SendSize);
ScrFrame.Size:=SendSize;
move(ScrFrame, SendBuf, SizeOf(ScrFrame));
NMUDP1.SendBuffer(SendBuf, SizeOf(ScrFrame));
end;
finally
MyStream.Free;
end;

procedure TForm1.GetFrame(FrameSize: integer);
var Frame: TscreenFrame;
FrameBuf: array [0..(sizeOf(TScreenFrame)-1)] of char;
fView: TfView;
pMemo: Pbyte;
i: integer;
begin
NMUDP1.ReadBuffer(FrameBuf, FrameSize);
move(FrameBuf, Frame, FrameSize);
//определим, это часть старого экрана или новый
if Frame.ScreenTime<>LastScrTime then
begin
LastScrTime:=Frame.ScreenTime;
if Scr.Size<>0 then
begin
//показываем ранее принятый экран
fView:=TfView.Create(Application);
fView.ShowStream(Scr);
fView.ShowModal;
fView.free;
scr.free;
Scr:=TMemoryStream.Create();
end;
end;
if Scr.Size<(frame.index+1)*PacketSize then
Scr.SetSize((frame.index+1)*PacketSize);
pMemo:=scr.memory;
inc(pMemo, frame.index*PacketSize);
for I:=0 To (PacketSize-1) do
begin
pMemo^:=frame.Data[i];
Inc(pMemo);
end;
end;



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

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

Наверх





Память: 0.46 MB
Время: 0.009 c
14-60380
Asrw
2003-06-02 20:47
2003.06.19
100+2 и т.д


14-60379
Za-aDa
2003-06-02 23:42
2003.06.19
Классы в Delphi


3-60077
sony1
2003-05-28 13:08
2003.06.19
Как выбрать из view первые 100 записей например ?


14-60381
Тих
2003-06-01 13:33
2003.06.19
_alloca - аналог в Delphi или-какая С runtimeDLL её экспортирует?


7-60441
DV
2003-04-15 16:51
2003.06.19
Еще раз про ком-порт





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский