Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Problem mit WinSockets (https://www.delphipraxis.net/18659-problem-mit-winsockets.html)

Florian H 22. Mär 2004 20:42


Problem mit WinSockets
 
Hallo,

ich habe ein PRoblem mit den Sockets...
Ich sende über ein ClientSocket ein JPEG-Bild an einen Serversocket.
Jedoch wird nur bei jedem 2. Aufruf des sendens tatsächlich ein bild übertragen.
ich hab kA wieso :pale:

Mein Client-Code:
Code:
   
MS := TMemoryStream.Create;
    try
// JPEG erstelleb etc...
    jpg.SaveToStream(ms);
    MS.Position := 0;
    clientsocket2.Open;
    application.processmessages;
    clientsocket2.Socket.SendBuf(MS.Memory^, MS.Size);
    application.processmessages;
    clientsocket2.Close;
    bmp.Free;
    jpg.Free;
  finally
    MS.Free;
  end;
Der Server-Code
Code:


 type TReceiveThread = class(TServerClientThread)
  protected
    procedure Execute; override;
  end;

procedure TReceiveThread.Execute; // DIESE PROZEDUR WIRD NUR JEDES 2. MAL AUFGERUFEN...
var
  WS: TWinSocketStream;
  MS: TMemoryStream;
  GetSize: Integer;
  Buffer: array[0..8191] of Char;
  jpg : TJpegImage;
  bmp : Tbitmap;
begin

  MS := TMemoryStream.Create;
  try
    while (not Terminated) and ServerSocket.Connected do
    begin
      WS := TWinSocketStream.Create(ClientSocket, 500);
      try
        if WS.WaitForData(60000) then
        begin
          GetSize := WS.Read(Buffer, SizeOf(Buffer));
          while (GetSize > 0) do
          begin
            MS.Write(Buffer, GetSize);
            GetSize := WS.Read(Buffer, SizeOf(Buffer));
          end;
          MS.Position := 0;
         jpg := TJPEGImage.Create;
          jpg.LoadFromStream(ms);
           terminate
        end;
      finally
        WS.Free;
      end;
    end;
  finally
    MS.Free;
  end;
end;


procedure TForm1.ServerSocket2GetThread(Sender: TObject;
  ClientSocket: TServerClientWinSocket;
  var SocketThread: TServerClientThread);
begin

  SocketThread := TReceiveThread.Create(False, clientSocket);

end;
ich hoffe, einer weiß es!

grüße
dk

FastJack2 24. Mär 2004 09:32

Re: Problem mit WinSockets
 
... also ich verschicke meine dateien so (nicht nur jpegs):

sender:
Delphi-Quellcode:
procedure TForm1.btn_sendClick(Sender: TObject);
var
  stream:TFileStream;
begin
  try
    cli.Port := strtoint(ed_port.text);
    cli.Address := ed_ip.Text;
    cli.Open;
    stream := TFileStream.Create(ed_file.Text,fmopenread);
    cli.Socket.SendStream(stream);
  except
    me_status.lines.add('error');
  end;
end;
receiver:
Delphi-Quellcode:
var
  outstream: TFileStream;

procedure TForm1.create;
begin
  outstream := TFileStream.Create(ed_file.text,fmcreate);
end;

procedure TForm1.srvClientRead(Sender: TObject; Socket: TCustomWinSocket);
var
  len:integer;
  rc:array [0..9999] of char;
begin
  memo1.Lines.Add('READ > '+socket.remoteaddress);
  len := socket.ReceiveBuf(rc,sizeof(rc));
  outstream.write(rc,len);
end;
ps:
Code:
cli: TClientSocket;
srv: TServerSocket;
ich weiss nicht ob es das ist, was du wolltest, da du mit threads arbeitest aber vielleicht hilft es dir weiter ...

greetz
-FastJack2


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:51 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz