AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi stream per TWinsocket
Thema durchsuchen
Ansicht
Themen-Optionen

stream per TWinsocket

Ein Thema von glkgereon · begonnen am 21. Sep 2004 · letzter Beitrag vom 22. Sep 2004
Antwort Antwort
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#1

stream per TWinsocket

  Alt 21. Sep 2004, 15:15
hi, ich möchte eine datei einlesen und per twinsocket versenden

dazu wollte ich tstream nehmen

also ich hab das bisher so in etwa:
(buftype gibt an was kommt)

Delphi-Quellcode:
if ClientSocket.RecieveBuf(temp, sizeof(temp))<>-1
then begin
     if buftype = liConnections //sendlist
     then Recievelist
     else if buftype = liFileList
     then recievefilelist
     else if buftype = liFile //sendfile
     then recievefile;
aber was muss ich jetzt in recievefile reinschreiben?

so in etwa geht das ja mit senden:

Delphi-Quellcode:
str:TStream;
begin
str:=TStream.Create;
str.LoadFromFile(Dateiname);
ServerSocket.Socket.SendBuf(str);
und dann beim empfangen das von oben

das problem: tstream hat kein loadfromfile/savetofile..

oder hat einer einen anderen vorschlag (ausser tstream)?
weiss einer wie ich mit tstream umgehe?
versende ich das so, wie oben angegeben?
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
Benutzerbild von Manzoni
Manzoni

Registriert seit: 15. Feb 2004
Ort: Berlin
120 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: stream per TWinsocket

  Alt 21. Sep 2004, 15:58
Zitat von SwissDelphiCenter.ch:
...eine Datei vom TServerSocket an den TClientSocket schicken?
http://www.swissdelphicenter.com/de/...de.php?id=1072

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ScktComp, StdCtrls;

type
  TForm1 = class(TForm)
    ClientSocket1: TClientSocket;
    ServerSocket1: TServerSocket;
    btnTestSockets: TButton;
    procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure ClientSocket1Disconnect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ClientSocket1Connect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ServerSocket1ClientConnect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure btnTestSocketsClick(Sender: TObject);
  private
    FStream: TFileStream;
    { Private-Deklarationen } 
  public
    { Public-Deklarationen } 
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm} 

procedure TForm1.ClientSocket1Read(Sender: TObject;
  Socket: TCustomWinSocket);
var
  iLen: Integer;
  Bfr: Pointer;
begin
  iLen := Socket.ReceiveLength;
  //Die Länge der Daten in Byte wird empfangen
  GetMem(Bfr, iLen);
  //Arbeitsspeicher für die Daten wird reserviert. Dies kann bei großen Dateien zum Problem werden.
  //Die Methode eignet sich nur für kleinere.
  try
    Socket.ReceiveBuf(Bfr^, iLen);
    //Der Puffer des Socket wird in den Speicher geschrieben. Bfr zeigt auf die Daten.
    FStream.Write(Bfr^, iLen);
    //Die Daten werden in den FileStream geschrieben.
  finally
    FreeMem(Bfr);
    //Der verwendete Speicher wird wieder freigegeben.
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  FStream := nil;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  if Assigned(FStream) then FreeAndNil(FStream);
  //Der Stream muss bei dem Verlassen des Programmes freigegeben werden.
end;

procedure TForm1.ClientSocket1Disconnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  if Assigned(FStream) then FreeAndNil(FStream);
end;

procedure TForm1.ClientSocket1Connect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  FStream := TFileStream.Create('c:\temp\test.stream.html', fmCreate or fmShareDenyWrite);
  //Der Client empfängt die Daten(in dem Fall die Datei). Beim Verbinden mit dem Server, wird die Datei angelegt. Näheres zu Streams siehe OH.
end;

procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  Socket.SendStream(TFileStream.Create('c:\temp\test.html', fmOpenRead or fmShareDenyWrite));
  //Der Server sendet an jeden Client, der sich verbindet die Datei(den Stream).
end;

procedure TForm1.btnTestSocketsClick(Sender: TObject);
begin
  ServerSocket1.Active := True;
  ClientSocket1.Active := True;
end;

end.
Bob
  Mit Zitat antworten Zitat
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#3

Re: stream per TWinsocket

  Alt 21. Sep 2004, 16:27
kannste den quelltext nich ein wenig erläutern?

ich versteh nämlich nur bahnhof...
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
Benutzerbild von Manzoni
Manzoni

Registriert seit: 15. Feb 2004
Ort: Berlin
120 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: stream per TWinsocket

  Alt 21. Sep 2004, 23:48
Ich hab ein paar Komentare in den Quelltext geschrieben. Ich weiss nicht ob dir die so weiterhelfen, hoffe es zumindest. Eventuell hilft dir ja dieser Beitrag auch noch weiter.
Bob
  Mit Zitat antworten Zitat
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#5

Re: stream per TWinsocket

  Alt 22. Sep 2004, 07:13
zum erstenm is mir jetzt dein qt klarer, und das indy-beispiel guck ich mir auch ma an
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:51 Uhr.
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