AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Fehler bei FileStream über Sockets.
Thema durchsuchen
Ansicht
Themen-Optionen

Fehler bei FileStream über Sockets.

Ein Thema von tr909 · begonnen am 25. Jan 2005 · letzter Beitrag vom 31. Jan 2005
 
tr909

Registriert seit: 5. Nov 2004
193 Beiträge
 
Turbo Delphi für Win32
 
#1

Fehler bei FileStream über Sockets.

  Alt 25. Jan 2005, 10:09
Moin.
Also ich versuche schon länger den Dateiversand über eine Socket-Verbindung zu realisieren. Habe auch schon viele Foren durforsten und teilweise auch was gefunden. Habe nun folgen Quellcode. Nur leider scheint das nur bei kleineren Dateien zu funktionieren. Bei größeren ist die empfangene Datei immer ein paar KB größer als das Orginal. Würde mich über das finden meines Fehlers freuen.

Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    OpenDialog1: TOpenDialog;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure ClientSocket1Connected (Sender: TObject; Socket: TCustomWinSocket);
    procedure ServerSocket1ClientConnected (Sender: TObject; Socket: TCustomWinSocket);
    procedure ClientSocket1OnRead (Sender: TObject; Socket: TCustomWinSocket);
    procedure ClientSocket1Disconnect(Sender: TObject; Socket: TCustomWinSocket);
    procedure ServerSocket1ClientDisconnect (Sender: TObject; Socket: TCustomWinSocket);
  private
    { Private-Deklarationen }
    FStream: TFileStream;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  ClientSocket1: TClientSocket;
  ServerSocket1: TServerSocket;
  Dateiname : String;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  FStream := nil;
  RStream := nil;
  ServerSocket1 := TServerSocket.create (self);
  ClientSocket1 := TClientSocket.create (self);
  ServerSocket1.OnClientConnect := ServerSocket1ClientConnected;
  ServerSocket1.OnClientDisconnect := ServerSocket1ClientDisconnect;
  ClientSocket1.OnConnect := ClientSocket1Connected;
  ClientSocket1.OnRead := ClientSocket1OnRead;
  ClientSocket1.OnDisconnect := ClientSocket1Disconnect;
  ServerSocket1.Port := 1080;
  ClientSocket1.Port := 1080;
  ClientSocket1.Host := '127.0.0.1';
end;

procedure TForm1.ServerSocket1ClientDisconnect (Sender: TObject; Socket: TCustomWinSocket);
begin
  if Assigned(FStream) then
  begin
    FStream.Free;
    FStream := nil;
  end;
end;


procedure TForm1.ClientSocket1OnRead (Sender: TObject; Socket: TCustomWinSocket);
var
  iLen: Integer;
  Bfr: Pointer;
begin
  iLen := Socket.ReceiveLength;
  GetMem(Bfr, iLen);
  try
    Socket.ReceiveBuf(Bfr^, iLen);
    RStream.Write(Bfr^, iLen);
  finally
    FreeMem(Bfr);
  end;
end;


procedure TForm1.ClientSocket1Connected (Sender: TObject; Socket: TCustomWinSocket);
begin
    RStream := TFileStream.Create(Dateiname+'_send', fmCreate or fmShareDenyWrite);
end;

procedure TForm1.ServerSocket1ClientConnected (Sender: TObject; Socket: TCustomWinSocket);
begin
  Socket.SendStream(TFileStream.Create(Dateiname, fmOpenRead or fmShareDenyWrite));
end;

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

procedure TForm1.Button1Click(Sender: TObject);
begin
  if OpenDialog1.execute then
    begin
      Dateiname := OpenDIalog1.Filename;
      ServerSocket1.Active := True;
      ClientSocket1.Active := True;
    end;

end;

end.
P.S.: nein, ich möchte es nicht mit den INDY-Komps machen

Gruß
tr909
  Mit Zitat antworten Zitat
 


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 00:12 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