![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Здравствуйте! как можно отправить картинку по частям через УДП
клиент Код:
procedure TForm1.seti;
var
MemStream : TMemoryStream;
buf : array[1..40000] of Char;
begin
bmp:= TBitmap.Create;
Jpg:= TJpegImage.Create;
bmp.Height:=Screen.Height;
bmp.Width:=Screen.Width;
DC:=GetDC(0);
PatBlt(Form1.Canvas.Handle, 0, 0, Form1.ClientWidth, Form1.ClientHeight, WHITENESS);
bitblt(bmp.Canvas.Handle, 0, 0, Screen.Width, Screen.Height, DC, 0, 0, SRCCOPY);
Jpg.Assign(Bmp);
jpg.CompressionQuality:=8;
jpg.Compress;
ReleaseDC(0, DC);
try
MemStream:= TMemoryStream.Create;
jpg.SaveToStream(MemStream);
For I:=0 to 10 do
Begin
MemStream.Position := 0;
IdUDPClient1.SendBuffer(MemStream.Memory^,MemStream.Size);
{IdUDPClient1.SendBuffer(MemStream.Memory^, 64512);}
MemStream.Position:=0;
Application.ProcessMessages;
end;
finally
MemStream.Free;
jpg.Free;
Bmp.Free;
end;
end;
------------------------------------------
procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
var t:string; StrStream: TStringStream;
begin
if AData.Size<=8 then
begin
StrStream:=TStringStream.Create('');
StrStream.CopyFrom(AData, AData.Size);
if StrStream.DataString='otpravka' then seti;
end;
end;Код:
procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
var
txt1,s,sl:string; t1,jcnt:integer;
StrStream: TStringStream;
MemStream: TMemoryStream; jpg: TJpegImage;
begin
if AData.Size<=16 then
begin
StrStream:=TStringStream.Create('');
StrStream.CopyFrom(AData, AData.Size);
ListBox1.Items.Add(StrStream.DataString);
t1:=0;
repeat
jcnt:=ListBox1.Items.Count-1;
repeat
if (ListBox1.Items[jcnt]=ListBox1.Items[t1]) and
(jcnt<>t1)
then begin
ListBox1.Items.Delete(jcnt);
ListBox1.Items.Delete(t1);
end;
Dec(jcnt)
until jcnt<=t1;
Inc(t1)
until t1>ListBox1.Items.Count-1;
Application.ProcessMessages;
StrStream.Free;
end else
if AData.Size > 0 then
begin
jpg := TJPEGImage.Create;
MemStream:= TMemoryStream.Create;
MemStream.CopyFrom(AData, AData.Size);
MemStream.Position := 0;
jpg.LoadFromStream(MemStream);
Image1.Picture.Graphic := jpg;
MemStream.Free;
jpg.Free;
end;end;
---------------------------------
IdUDPClient1.Active:=true;
try
IdUDPClient1.Send('otpravka');
finally
IdUDPClient1.Active:=false;
end; |
|
#2
|
|||
|
|||
|
ну может знает кто как отправить пакет хотябы по 32кб
Код:
try
MemStream:= TMemoryStream.Create;
MemStream.LoadFromFile('c:\1.txt');
IdUDPClient1.SendBuffer(MemStream.Memory^,MemStream.Size);
MemStream.Position:=0;
Application.ProcessMessages;
finally
MemStream.Free; |
|
#3
|
||||
|
||||
|
в цикле читаешь из TMemoryStream блоками размером BufferSize и посылаешь такими же блоками, с интервалом в х мс, чтобы следующий пакет не пришел раньше предыдущего.
|
|
#4
|
|||
|
|||
|
Код:
paket:=MemStream.Size div 8192; for i:=1 to paket do IdUDPClient1.SendBuffer(MemStream.Memory^,paket); ![]() |
|
#5
|
|||
|
|||
|
если я отправляю фалй тхт то приходит файл с текстом который заканчиваеться точками, а бмб весь черный
|
|
#6
|
||||
|
||||
|
Код:
procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
var
Buffer: array of Byte;
Len: Integer;
begin
Len:=AData.Size;
SetLength(Buffer, Len);
Memo1.Lines.Add(IntToStr(Len));
if FileStreamSize=-1 then
begin
AData.ReadBuffer(Buffer[0], Len);
FileStreamSize:=PInteger(@Buffer[0])^;
end else
begin
Len:=AData.Read(Buffer[0], Len);
AFileStream.Write(Buffer[0], Len);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
FileStream: TFileStream;
Buffer: array [0..$fff] of Byte;
Len: Integer;
begin
FileStream:=TFileStream.Create('image.jpg', fmOpenRead);
try
PInteger(@Buffer[0])^:=FileStream.Size;
IdUDPClient1.SendBuffer('10.162.48.4', IdUDPServer1.DefaultPort, Buffer[0], SizeOf(Integer));
repeat
Len:=FileStream.Read(Buffer[0], Length(Buffer));
IdUDPClient1.SendBuffer('10.162.48.4', IdUDPServer1.DefaultPort, Buffer[0], Len);
Application.ProcessMessages;
Sleep(5);
until Len=0;
finally
FileStream.Free;
end;
end;http://data.cod.ru/134691 мультиплексора клиентов нет! счетчика принятых байт до FileStreamSize тоже нет. |