AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi wie einen stream mit den socks senden und empfangen?!
Thema durchsuchen
Ansicht
Themen-Optionen

wie einen stream mit den socks senden und empfangen?!

Ein Thema von prinz_inzide · begonnen am 9. Mai 2005 · letzter Beitrag vom 12. Mai 2005
 
Arnulf

Registriert seit: 28. Okt 2004
Ort: Wien
271 Beiträge
 
#6

Re: wie einen stream mit den socks senden und empfangen?!

  Alt 10. Mai 2005, 12:16
Also ich schick dir mal eine komplettlösung - so wie ich es gemacht hab.
Ich bin so begeistert von diesem Forum, daß ich liebend gerne auch source codes reinposte für die ich 2-3 wochen gebraucht hab
uns so hinzubekommen wie ich es haben wollte.
Das ist teil meines Anticheats - die funktion die screenshots an den server versendet .....
Aja an die Profis hier - wenns bessere methoden gibt - ich rede gerne darüber .

Verschicken und Empfangen von streams (files) über tserver/tclient socket:
Client:
Delphi-Quellcode:
         const
               Package = 256;
          var
             JpegImg: TJpegImage;
             AStream : TFileStream;
             buffer : Pointer;
             i,last, count : integer;


               try
                 AStream := TFileStream.Create('machstdu.jpg',fmOpenRead);
                 buffer := AllocMem(AStream.Size);
                 fMain.ClientSocket.Socket.SendText('#SIZE' + InttoStr(AStream.Size));
                 sleep (500);
                 for i := 1 to AStream.Size div Package do
                 begin
                      AStream.Read(Buffer^,Package);
                      fMain.ClientSocket.Socket.SendBuf(buffer^,Package);
                      Sleep (50);
                      count := i;
                 end;
                 Sleep(50);
                 if ((count*Package) < AStream.Size)
                 then begin
                      last := AStream.Size - (count * Package);
                      AStream.Read(Buffer^,last);
                      fMain.ClientSocket.Socket.SendBuf(buffer^,last);
                      end;
               finally
                 FreeMem(buffer);
                 FreeAndNil(AStream);
                 deletefile( 'machstdu.jpg' );
                 AddLogEntry ('CLNT: ScreenShot has been taken & uploaded! ' + FormatDateTime('dd.mm.yyyy, hh:nn:ss', now));
                end;
Server:
Delphi-Quellcode:
      else if (TempCon^.Status = ST_GETSCRSIZE)
      then begin
           s := socket.ReceiveText;
           if copy(s,1,5) = '#SIZE'
           then begin
                TempCon^.Screensize := StrtoInt(copy (s,6,length(s)-5));
                TempCon^.Status := ST_GETSHOT;
                TempCon^.ScreenTimeOut := incmillisecond (Time, strtoint(edtSSTimeOut.Text));
                AddLogEntry ('Size recv - going st_getshot');
                end
                else begin
                     AddLogEntry('ERROR: In Screenshot RECV! No Size received try again');
                     AddProtocolEntry('ERROR: Screenshot faild no Size RECV!');
                     TempCon^.Status := TempCon^.OldStatus;
                end;
           end
      else if (TempCon^.Status = ST_GETSHOT)
           then begin
                len := Socket.ReceiveLength;
                try
                  str := TFileStream.Create(TempCon^.ScreenFileName ,fmOpenReadWrite);
                  str.Seek(0,soFromEnd);
                  buffer := AllocMem(len);
                  Socket.ReceiveBuf(buffer^,len);
                  str.Write(buffer^,len);
                finally
                  FreeMem(buffer);
                  if (str.Size >= TempCon^.ScreenSize)
                  then begin
                       FreeAndNil(str);
                       TempCon^.Status := TempCon^.OldStatus;
                       if cbxShowScreen.Checked then ScreenshotReady (TempCon^.ScreenFileName);
                       AddProtocolEntry ('EndOfScreenShot');
                       end
                       else FreeAndNil(str);
                end;
Das ist ein dirrekter Auszug aus meine pojekt .
Ich hab bei den userdaten - also für socket.connection[i].data 3 variablen angelegt.
1. einen status - tempcon^.status - der mir anzeigt ob ich daten oder text empfange.
2. screensize - im prinzip schicke ich vorher nur die größe der zu erwartenden datei, damit ich weiß wann schluss ist und ich den status von daten auf text zurückstellen kann.
3. screentimeout - ich hab sicherheitshalber eine timeout funktion eingebaut, kann ja sein, daß bei der übertragung was schief geht.

Das war für mich die einzig praktikable Lösung - und wie gesagt für das ganze hab ich wochen gebraucht !!!
Hoffe ich habs gut gemacht

Arnulf
  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 08:34 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