Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Streams versenden (Ohne Indy's) (https://www.delphipraxis.net/36474-streams-versenden-ohne-indys.html)

Neutral General 20. Dez 2004 16:06


Streams versenden (Ohne Indy's)
 
Gibt es irgendwelche Komponenten oder Möglichkeiten Streams und Text durch das Internet zu senden und zu empfangen ? Delphi 3 und Indy's vertragen sich nämlich nicht :roll:

Luckie 20. Dez 2004 16:09

Re: Streams versenden (Ohne Indy's)
 
Bei Delphi 3 Professional sind doch die Fastnet Komponenten dabei, wenn mich nicht alles täuscht.

Neutral General 20. Dez 2004 16:13

Re: Streams versenden (Ohne Indy's)
 
Ok dann 2 Fragen :

Sind das die Komponenten unter "Internet" oder was ? Ansonsten kann es auch sein das ich zu blöd bin die zu finden :roll:

Da ich mich mit Streams und so (noch) nicht wirklich auskenne wäre ich dankbar dafür wenn jemand mir zeigen könnte wie das alles so im Prinzip funktioniert.

paresy 20. Dez 2004 16:14

Re: Streams versenden (Ohne Indy's)
 
senden:

Delphi-Quellcode:
uses Classes, ScktComp;

const BufferSize = 8192;

type
 TTSendStream = class(TThread)
  private
   FSocket: TCustomWinSocket;
   FStream: TStream;
   FRunning: Boolean;
  public
   constructor Create(CreateSuspended: Boolean; Socket: TCustomWinSocket; SourceStream: TStream);
   property Running : Boolean read FRunning;
  protected
   procedure Execute; override;
 end;

implementation


//------------------------------------------------------------------------------
// TTSendStream
//------------------------------------------------------------------------------
constructor TTSendStream.Create(CreateSuspended: Boolean; Socket: TCustomWinSocket; SourceStream: TStream);
begin

 FRunning := True;
 FSocket := Socket;
 FStream := SourceStream;

 inherited Create(CreateSuspended);

end;

//------------------------------------------------------------------------------
procedure TTSendStream.Execute;
var chunks, i, BytesRead, BytesWritten: Integer;
    Bfr: Pointer;
begin

 GetMem(Bfr, BufferSize);
 chunks := Ceil(FStream.Size / BufferSize);
 for i:=0 to chunks-1 do
  begin
   BytesRead := FStream.Read(Bfr^ , BufferSize);
   BytesWritten := FSocket.SendBuf(Bfr^, BytesRead);
   //Wenn Winsock Buffer voll, retry...
   while BytesRead <> BytesWritten do
    begin
     sleep(100);
     BytesWritten := FSocket.SendBuf(Bfr^, BytesRead);
    end;
  end;
 FreeMem(Bfr);

 FRunning := False;

//------------------------------------------------------------------------------
//--- USAGE
//------------------------------------------------------------------------------

 Stream := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);

 Thread := TTSendStream.Create(False, Socket, Stream);
 while Thread.Running do
  begin
   Application.ProcessMessages;
   sleep(10);
  end;
 Thread.Free;
 
 Stream.Free;


end;
und hier empfangen

Delphi-Quellcode:
   while FormPos < FormSize do
    if fConnectionFormData.Socket.ReceiveLength > 0 then
     begin
      Len := fConnectionFormData.Socket.ReceiveLength;
      GetMem(Data, Len);
      ReadSize := fConnectionFormData.Socket.ReceiveBuf(Data^, Len);
      Inc(FormPos, ReadSize);
      Stream.WriteBuffer(Data^, ReadSize);
      FreeMem(Data);
      Event(FormTag, FormPos, FormSize);
     end
    else
     sleep(100);
sind code snippets aus den projekt... also musst du für deine bedürnisse evtl noch anpassen.... aber zumindest von grundprinzip...

grüße paresy

Neutral General 20. Dez 2004 16:23

Re: Streams versenden (Ohne Indy's)
 
ok Danke ich werde mich mal damit beschäftigen, aber was ist das mit dem Socket ?
Was genau ist das und wofür brauch man das :gruebel:
Muss man da ein TCustomWinSocket Object angeben ? :wall:

[edit]Bei uses fehlt noch die Unit "Math" :wink: [/edit]

Luckie 20. Dez 2004 16:26

Re: Streams versenden (Ohne Indy's)
 
Ja die sollten sich bei "Internet" finden. Sind sie da bei dir nicht? Und obiger Code braucht bestimmt kein math - es sei denn ich habe da eben was übersehen.

Neutral General 20. Dez 2004 16:28

Re: Streams versenden (Ohne Indy's)
 
ich brauchte Math wegen "Ceil" :wink:

Luckie 20. Dez 2004 16:32

Re: Streams versenden (Ohne Indy's)
 
Wollte gerade sagen, obiger Code braucht nämlich kein [u]math[i].

Neutral General 20. Dez 2004 16:35

Re: Streams versenden (Ohne Indy's)
 
Zitat:

Zitat von Luckie
Wollte gerade sagen, obiger Code braucht nämlich kein [u]math[i].

Doch :mrgreen:

wegen dieser Zeile :

Delphi-Quellcode:
chunks := Ceil(FStream.Size / BufferSize);
aber ich habe noch eine Frage zu dem Empfangen. Mit dem was da steht kann ich leider rein gar nichts anfangen :wall:

Luckie 20. Dez 2004 16:53

Re: Streams versenden (Ohne Indy's)
 
Mist. :roll:


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:24 Uhr.
Seite 1 von 2  1 2      

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