Fórum Enviar JPEG Por ClientSocket amp; ServerSocket ? #354452

27/02/2008

0

Enviar JPEG Por ClientSocket & ServerSocket ?

Como posso fazer isso ? :wink:


Warfighter

Warfighter

Responder

Posts

27/02/2008

Paullsoftware

Olá amigo, faz uma pesquisa no forum sobre ServerSocket e Steam, esse assunto já foi discutido aqui no forum e já foram mostradas algumas soluções... :wink:


Responder

Gostei + 0

27/02/2008

Warfighter

Onde está o Erro

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.



Responder

Gostei + 0

27/02/2008

Warfighter

alguém sabe onde eu errei ? :shock:


flwz


Responder

Gostei + 0

27/02/2008

Onjahyr

Qual exatamente o erro que está aparecendo?


Responder

Gostei + 0

27/02/2008

Warfighter

Qual exatamente o erro que está aparecendo?


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:


Responder

Gostei + 0

28/02/2008

Warfighter

Help :shock:


Responder

Gostei + 0

29/02/2008

Warfighter

sobe :shock:


Responder

Gostei + 0

01/03/2008

Warfighter

alguém sabe onde eu errei ?
:shock:


Responder

Gostei + 0

24/03/2008

Warfighter

Num sei onde errei

Alguém faiz enviando em jpeg ?

please


Responder

Gostei + 0

26/03/2008

Warfighter

Nem um Help :cry:


Responder

Gostei + 0

18/05/2009

Rodc

A pergunta é antiga mas vou responder para caso alguém esteja precisando.
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;



Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar