![]() |
|
|
Регистрация | << Правила форума >> | 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 тоже нет. Пишу программы за еду. __________________ |