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.