procedure TForm1.btnsendfilesClick(Sender: TObject);
var i, k, dateilaenge : Longint;
dateiname :
string;
datei : TFileStream;
ms : TMemoryStream;
begin
for i := 0
to ListBox1.Items.Count-1
do
begin
datei := TFileStream.Create(ListBox1.Items[i], fmOpenRead);
ms := TMemoryStream.Create;
dateiname := ListBox1.Items[i];
k := length(dateiname);
while (dateiname[k] <> '
\')
do dec(k);
//Dateiname rausfinden
dateiname := copy(dateiname,k+1,length(dateiname)-k);
dateilaenge := length(dateiname);
ms.
Write(dateilaenge,4);
ms.
write(pointer(dateiname)^, dateilaenge);
ms.CopyFrom(datei,0);
ms.Position := 0;
try
if server
then begin
ServerSocket1.Socket.Connections[0].SendStream(ms);
end
else begin
ClientSocket1.Socket.SendStream(ms);
end;
finally
// ms.Free;
// datei.Free;
end;
end;
end;
//EMPFANGEN
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var EmpfTxt, dateiname :
string;
datei : TFileStream;
ms : TMemoryStream;
dateilaenge : integer;
begin
EmpfTxt := Socket.ReceiveText;
if (copy(EmpfTxt,1,4) = '
Text')
then begin
delete(EmpfTxt,1,4);
EChatWindow.SelAttributes.Color := clblue;
EChatWindow.Lines.Add(EmpfTxt);
end ELSE begin
ms := TMemoryStream.Create;
ms.Setsize(Socket.ReceiveLength);
ms.
Write(EmpfTxt[1],length(EmpfTxt)-1);
ms.Position := 0;
ms.
Read(dateilaenge,4);
//Länge des Dateinamen lesen
setlength(dateiname,dateilaenge);
ms.
read(pointer(dateiname)^, dateilaenge);
//Jetzt den Dateinamen auslesen (man weiß wie lang er ist)
datei := TFileStream.Create(ExtractFilePath(ParamStr(0))+dateiname, fmCreate);
//datei erstellen
datei.Position := 4 + dateilaenge;
datei.CopyFrom(ms,ms.Size-dateilaenge-4);
FreeAndNil(datei);
FreeAndNil(ms);
end;
end;