Autor Beitrag
hibbert
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1007

WinServer2003, Win XP, Linux
D6 Pers, D05
BeitragVerfasst: Mo 08.05.06 18:52 
Hi,
ich habe ein Programm geschrieben, welches einige Dateien verschickt. Es handelt sich aber immer um verschiedene Dateitypen. Nun muss ich beim Empfangen ja den Dateinamen angeben. Kann ich den Dateinamen evtl beim Empfangen mit auslesen?

So versende ich:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
procedure tform1.dateiSenden(filename:string);
var fs:tfilestream;
stream:TIdStreamVCL;
begin
with IdTCPClient1 do
  begin
    host:=serverip;
    fs := TFileStream.Create(filename, fmOpenRead or fmShareDenyWrite); //Datei in FileStream einlesen
    stream := TIdStreamVCL.Create(fs,true);
    Connect;  //und Verbindung herstellen
    try
      IOHandler.WriteBufferOpen; //stellt sicher, dass alle Daten versendet werden
      try
        IOHandler.Write(stream, 0, true); {das 2. true ist wichtig!, da es bewirkt, dass die Größe des Streams mittels WriteInteger zuerst verschickt wird}
        IOHandler.WriteBufferClose;
      except
        IOHandler.WriteBufferCancel;
        raise;
      end;
    finally
      Disconnect;
      fs.Free;
    end;
  end;
end;


und so empfange ich:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
procedure TForm1.IdTCPServer1Execute(AContext: TIdContext);
var
  fs: TFileStream;
  stream: TIdStreamVCL;
  SizeOfIncomingStream: integer;
begin
  fs := TFileStream.Create('datei.endung', fmCreate or fmShareExclusive);
  stream := TIdStreamVCL.Create(fs);
  with AContext.Connection do
    try
      SizeOfIncomingStream := IOHandler.ReadInteger; //Größe des Streams empfangen
      IOHandler.ReadStream(stream, SizeOfIncomingStream); //und übergeben
    finally
      Disconnect;
      fs.Free;
    end;
end;


thx hibbert

_________________
I kunnen väl svara endast ja eller nej
Om i viljen eller nej
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mo 08.05.06 20:12 
Moin!

Schau dir mal TStringStream an, ist zwar etwas oversized, der Ansatz, aber damit kannste das dann auf die gleiche Art lösen: Einfach die String-Länge als Integer davor und dann den String als Stream. ;)

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
hibbert Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1007

WinServer2003, Win XP, Linux
D6 Pers, D05
BeitragVerfasst: Mo 08.05.06 20:34 
Hi,
ich habe jetzt diesen Ansatz:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
try
      IOHandler.WriteBufferOpen; //stellt sicher, dass alle Daten versendet werden
      try     // TStringStream
        IOHandler.write('test.txt',8,true);
        IOHandler.Write(stream, 0, true); {das 2. true ist wichtig!, da es bewirkt, dass die Größe des Streams mittels WriteInteger zuerst verschickt wird}
        IOHandler.WriteBufferClose;
      except


In Zeile 4 hoffe ich, dass ich den Dateinamen übermittel und danach die Datei.

Nur wie bekomme ich die Daten beim empfangen wieder auseinander?

hibbert

_________________
I kunnen väl svara endast ja eller nej
Om i viljen eller nej
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mi 10.05.06 00:17 
Moin!

Was du brauchst, nennt man Suche in: Delphi-Forum, Delphi-Library PROTOKOLL, mach dich mal ein bischen schlau darüber. ;)

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.