Форум: "Сети";
Текущий архив: 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