Fórum Enviar JPEG Por ClientSocket amp; ServerSocket ? #354452
27/02/2008
0
Como posso fazer isso ? :wink:
Warfighter
Curtir tópico
+ 0Posts
27/02/2008
Paullsoftware
Gostei + 0
27/02/2008
Warfighter
Eu transformei o Bitmap em Jpeg mais ele não envia conforme o previsto
[b:de7d87d7bc]ClienteSocket1[/b:de7d87d7bc]
unit screen;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, ScktComp, StdCtrls;
type
TForm1 = class(TForm)
ClientSocket1: TClientSocket;
Image2: TImage;
Label1: TLabel;
Button1: TButton;
Button2: TButton;
Button3: TButton;
SaveDialog1: TSaveDialog;
procedure ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
Reciving: boolean;
DataSize: integer;
Data: TMemoryStream;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
begin
label1.Caption := ´Conectado´;
end;
procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
var
s, sl: string;
begin
s:= Socket.ReceiveText;
if not Reciving then
begin
SetLength(sl, StrLen(PChar(s))+1);
StrLCopy(@sl[1], PChar(s), Length(sl)-1);
DataSize:= StrToInt(sl);
Data:= TMemoryStream.Create;
Delete(s, 1, Length(sl));
Reciving:= true;
end;
try
Data.Write(s[1], length(s));
if Data.Size = DataSize then
begin
Data.Position:= 0;
Image2.Picture.Graphic.LoadFromStream(Data);
Data.Free;
Reciving:= false;
end;
except
Data.Free;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
clientsocket1.Socket.SendText(´send´);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
ClientSocket1.Active:= true;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
if SaveDialog1.Execute then
Image2.Picture.SaveToFile(Savedialog1.filename);
end;
end.[b:de7d87d7bc]
ServerSocket1[/b:de7d87d7bc]
unit UScreen2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ScktComp, ExtCtrls, StdCtrls, jpeg;
type
TForm1 = class(TForm)
ServerSocket1: TServerSocket;
Image1: TImage;
procedure FormCreate(Sender: TObject);
procedure ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure ScreenShot(DestBitmap : TBitmap) ;
var
DC : HDC;
begin
DC := GetDC (GetDesktopWindow) ;
try
DestBitmap.Width := GetDeviceCaps (DC, HORZRES) ;
DestBitmap.Height := GetDeviceCaps (DC, VERTRES) ;
BitBlt(DestBitmap.Canvas.Handle, 0, 0, DestBitmap.Width, DestBitmap.Height, DC, 0, 0, SRCCOPY) ;
finally
ReleaseDC (GetDesktopWindow, DC) ;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
ServerSocket1.Active:= true;
end;
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
ms: TMemoryStream;
b:TBitmap;
jpg:TJPEGImage;
begin
if Socket.ReceiveText = ´send´ then
begin
b := TBitmap.Create;
jpg := TJPEGImage.Create;
ms:= TMemoryStream.Create;
try
ScreenShot(b) ;
jpg.Assign(b);
Image1.Picture.Graphic := (jpg);
b.FreeImage;
FreeAndNil(b) ;
Image1.Picture.Graphic.SaveToStream(ms);
ms.Position:= 0;
Socket.SendText(IntToStr(ms.Size) + #0);
Socket.SendStream(ms);
except
ms.Free;
end;
end;
end;
end.Gostei + 0
27/02/2008
Warfighter
flwz
Gostei + 0
27/02/2008
Onjahyr
Gostei + 0
27/02/2008
Warfighter
Nem um erro amigo
Apenas não carrega a imagem no image1 do clientsocket
gostria de saber se o modo de receber a imagem está errado ou certo ?
até + :wink:
Gostei + 0
28/02/2008
Warfighter
Gostei + 0
29/02/2008
Warfighter
Gostei + 0
01/03/2008
Warfighter
:shock:
Gostei + 0
24/03/2008
Warfighter
Alguém faiz enviando em jpeg ?
please
Gostei + 0
26/03/2008
Warfighter
Gostei + 0
18/05/2009
Rodc
Você não pode ler o Socket usando Socket.ReceiveText porque um texto é encerrado quando ele encontra um caracter zero. E com certeza em um JPG vai ter um caracter zero no meio do arquivo. Você precisa ler em um buffer e depois jogar o buffer dentro do Stream.
Não estou com Delphi aqui, mas seria algo como o código abaixo:
var buffer: string; begin SetLength(buffer, Socket.ReceiveLength); Socket.ReceiveBuffer(PChar(buffer), Socket.ReceiveLength); ..... end;
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)