Einzelnen Beitrag anzeigen

mb1996

Registriert seit: 30. Dez 2009
243 Beiträge
 
Delphi 2009 Professional
 
#1

Indy TCP Bild senden

  Alt 13. Mai 2013, 14:38
Hallo Leute,
ich möchte Bilder von einen Client zu den Server senden.
Obwohl ich schon viel probiert habe, ist mein Stream immer zerstört :/ Nun weiß ich aber nicht, wieso.

Server (Lazarus):
Delphi-Quellcode:
procedure TFormMain.TCPServerExecute(AContext: TIdContext);
var size: Int64;
    ms: TMemoryStream;
    ClientPos: string;
begin
  ms:=TMemoryStream.Create;
  try
    ClientPos:='0';
    //ClientPos:=AContext.Connection.IOHandler.ReadLn;
    Status(ClientPos);

    size:=StrToInt64(AContext.Connection.IOHandler.ReadLn);
    AContext.Connection.IOHandler.ReadStream(ms,size,false);

  finally
    Status('Recived Picture from '+AContext.Connection.Socket.Binding.IP);
    //img1.Picture.LoadFromStream(ms);
    if FileExists('C:\Result.bmp') then DeleteFile('C:\Result.bmp');
    ms.SaveToFile('C:\Result.bmp');
    ms.Free;

    AContext.Connection.Disconnect;
  end;
end;
Client (Delphi 2009 Professional):
Delphi-Quellcode:
procedure TFormMain.tmrNetworkTimer(Sender: TObject);
var ms: TMemoryStream;
begin
  if (NetworkRender=true) and (not TCPClient.Connected) then
  begin
    ms:=TMemoryStream.Create;
    try
      TCPClient.Host:=NetworkHost;
      TCPClient.Port:=NetworkPort;
      TCPClient.Connect;

      //Senden
      //TCPClient.IOHandler.WriteLn(IntToStr(split));

      Bitmap.SaveToStream(ms);
      ms:=TMemoryStream.Create; //<------------ Ups, außerdem muss die Anwendung als Administrator ausgeführt werden, da direkt auf C geschrieben wird.
      ms.Position:=0;

      TCPClient.IOHandler.Writeln(IntToStr(ms.Size));
      TCPClient.IOHandler.Write(ms);

    finally
      ms.Free;
      TCPClient.Disconnect;
    end;
  end;
end;

Geändert von mb1996 (13. Mai 2013 um 14:49 Uhr)
  Mit Zitat antworten Zitat