Entwickler-Ecke

Internet / Netzwerk - Problem mit dem Stream


Die Brotmafia - Do 29.12.05 18:35
Titel: Problem mit dem Stream
Also, ich hab mich jetzt mal ein bisschen schlau gemacht und hab folgendes gecodet bzw. übernommen:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
    if text='SendFile'
     then begin
      Socket.SendText('StreamComming');
      Sleep(300);
      Fstream:=TFileStream.Create('C:\datei.txt', fmOpenRead);
      Socket.SendStream(FStream);
     end;


So, die datei C:\datei.txt ist natürlich da ;)


Jetzt wird der Stream empfangen:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
    if('StreamComming' = copy(text,0,13)) then begin
     Fstream:=TFileStream.Create('C:\Datei2.txt', fmOpenWrite);
     SizeofFile:=Socket.ReceiveLength;
     GetMem(pBuffer, SizeofFile);
     try
      Socket.ReceiveBuf(pBuffer^,SizeofFile);
      Fstream.Write(pBuffer^,SizeofFile);
       finally
        FreeMem(pBuffer);
        FStream.Free;
       end;
      end;


Hm, wenn ich das ganze jetzt ausführe passiert einfach nichts, auf c:\ sind die dateien datei1.txt und datei2.txt, in der datei1.txt steht test, in der datei2.txt steht nichts, wenn ich jetzt das programm starte ist alles genau so wie es vorher war, keine änderung, obwohl doch jetzt eigentlich auch in der datei2.txt test stehen müsste?
Hoffe mal ihr könnt mir helfen, ich probier auch noch n bisschen rum, vielleicht komm ich ja noch drauf ^^

thnx!

Moderiert von user profile iconraziel: Code- durch Delphi-Tags ersetzt


Narses - Do 29.12.05 19:06

Moin!

Du mußt vorher noch die Länge des Streams schicken und in einer Schleife bis zum Erreichen dieser Länge empfangen (siehe letzten Thread dazu...).

cu
Narses


Die Brotmafia - Do 29.12.05 20:29


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
    if text='GetFile'
     then begin
      socket.SendText('ScreenComming');
      socket.SendText(GRÖßE DES STREAMS DA!)
      FStream := TFileStream.Create('C:\screenshot.bmp', fmOpenRead);
      socket.SendStream(Fstream);
    end;


Wie kann ich die größe des Streams versenden, also wie kann ich die größe herausfinden lassen?


Im Client würd ichs dann so machen:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
     if('ScreenComming' = copy(text,0,length(text))) then
     begin
      repeat
       pBuffer:=@Buffer;
       SizeofBuffer:=Socket.ReceiveBuf(pBuffer^, 4096);
       FileStream.Write(pBuffer^, SizeofBuffer);
       Inc(AlreadyReceived, SizeofBuffer);
       Socket.Sendtext(InttoStr(AlreadyReceived));
      until
       GrößedesStreams:='Streamgröße';
     end;


Wie kann ich die größe der Datei bestimmen? Ansonsten gehts schon soweit, nur hört das Programm halt nicht dann auf wenn ichs gerne hätte und stürtzt dann natürlich ab ^.^

Moderiert von user profile iconraziel: Code- durch Delphi-Tags ersetzt


Narses - Fr 30.12.05 00:46

Moin!

TFileStream eingeben und F1 drücken... :wink:

cu
Narses


Die Brotmafia - Fr 30.12.05 01:18

Hab ich gemacht, da steht aber nicht wie ich die Größe des Streams bzw. der Datei finden kann, vielleicht bin ich auch nur zu dumm es zu finden..


Fighter#1 - Fr 30.12.05 08:54

Wenns nur um die Datei größe geht dann hier ein
bischen Source.

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
function Dateigroesse (Datei : String) : Integer;
var SRec: TSearchRec;  
begin  
  Result := -1;  
  if FindFirst(Datei, faAnyFile, SRec) = 0 then  
  try Result := SRec.Size finally FindClose(SRec) end;  
end;


Das nächste mal einfach suchen ...


Narses - Fr 30.12.05 10:03

Moin!

user profile iconDie Brotmafia hat folgendes geschrieben:
Hab ich gemacht, da steht aber nicht wie ich die Größe des Streams bzw. der Datei finden kann, vielleicht bin ich auch nur zu dumm es zu finden..

...(Fortsetzung) dann auf Eigenschaften klicken und links "Size" auswählen, da werden sie geholfen... :wink:

@user profile iconFighter#1Er hat doch schon ein Streamhandle, wozu dann noch mit FindFirst arbeiten... :wink:

cu
Narses


alzaimar - Fr 30.12.05 10:43
Titel: Re: Problem mit dem Stream
user profile iconDie Brotmafia hat folgendes geschrieben:


Delphi-Quelltext
1:
2:
3:
...
   Socket.SendText('StreamComming'); 
...


Wenn schon in Englisch, dann aber richtig: 'Stream Coming' (http://dict.leo.org/se?lp=ende&p=/Mn4k.&search=coming). Was aber auch falsch ist. Besser wäre 'Incoming Stream' oder 'Stream arriving'. Letztendlich ist es natürlich egal, den den Compiler will ich sehen, der Rechtschreibung und Grammatik bemängelt. :wink: