AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Problem: TMemoryStream und JPEG Netzwerküberwachungssoftware
Thema durchsuchen
Ansicht
Themen-Optionen

Problem: TMemoryStream und JPEG Netzwerküberwachungssoftware

Ein Thema von LAWn-M0W3R · begonnen am 8. Sep 2006 · letzter Beitrag vom 27. Sep 2006
Antwort Antwort
Seite 2 von 2     12   
LAWn-M0W3R

Registriert seit: 31. Jul 2006
Ort: Potsdam / Berlin
38 Beiträge
 
#11

Re: Problem: TMemoryStream und JPEG Netzwerküberwachungssoft

  Alt 22. Sep 2006, 09:40
Ich hab ja versucht das ganze nochmal umzuformen und zu verstehen, aber es klappt eben nicht!
Die Indys kann ich nicht nehmen, weil meine Delphi-Version (6 Personal) mir immer einen Fehler ausgibt, wenn ich die Packages einlesen will. Dann habe ich noch eine Trial-Version von BDA 2006, aber die läuft eben nur 30 Tage und dann muss ich sie wieder reinstallieren! Wenn jemand einen Link zu einer guten Version (mit Crack oder Serial) oder vielleicht einen Crack oder eine Seriennummer für BDA 2006 für mich hat, wäre ich sehr dankbar!
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#12

Re: TMemoryStream, JPEG-Übertragung: Bitte helft!

  Alt 22. Sep 2006, 11:06
Zitat von LAWn-M0W3R:
Delphi-Quellcode:
If Log.Lines[Log.Lines.Capacity -1]='#SCREENOK'
then
 begin
  try
  Socket.SendBuf(Stream, Stream.Size);
  Stream.Clear;
  FreeAndNil(Stream);
  FreeAndNil(JPG);
  except
  end;
 end;
end;
1. Log.Lines.Capacity ist was anderes als Log.Lines.Count. Überprüfe deinen Code und korrigiere diesen Umstand und konsultiere die Hilfe dazu!
2. SendBuf() nimmt keine Instanzen. Hier sendest du ab der Instanzenadresse Stream und nachfolgend alle Daten bis Stream.Size des Speichers, aber nicht des Streams.
3. Stream.Clear bringt vor einem Free irgendwie gar nix, das macht der Stream selber im Destruktor.

Nutze SendStream() und setze danach Stream auf Nil. Der Socket gibt den Stream nach dem Senden selbstständig frei, da er ihn asynchron zu deinem VCL Code versendet.
  Mit Zitat antworten Zitat
LAWn-M0W3R

Registriert seit: 31. Jul 2006
Ort: Potsdam / Berlin
38 Beiträge
 
#13

Re: Problem: TMemoryStream und JPEG Netzwerküberwachungssoft

  Alt 26. Sep 2006, 20:11
Danke, hat mir trotzdem nicht weitergeholfen, aber Capacity hat irgendwie die selbe Funktion! Ich glaube ich probier das mit den Indys jetzt nochmal!
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#14

Re: Problem: TMemoryStream und JPEG Netzwerküberwachungssoft

  Alt 26. Sep 2006, 21:32
Zitat von LAWn-M0W3R:
Danke, hat mir trotzdem nicht weitergeholfen, aber Capacity hat irgendwie die selbe Funktion! Ich glaube ich probier das mit den Indys jetzt nochmal!
Nein, hat es nicht. Die Kapazität der Stringliste wird immer um eine Wert erhöht und gibt nicht die aktuelle Befüllung an. Dieses ist dazu gedacht, dass die Speicheralloziierung nicht bei jedem neuen Item tätig werden muss, was den Speicher fragmentiert.

Und das dies alle Fehler waren, wage ich eh zu bezweifeln. Es ist schwer einen solchen Quellcode alle Fehler zu finden durch reines schauen. Mich würde zum Abschluss noch interessieren, wie du den Punkt Nummer 2 gelöst hast. Könntest du den Codeabschnitt mit deinrer Korrektur nochmals posten, bitte?
  Mit Zitat antworten Zitat
LAWn-M0W3R

Registriert seit: 31. Jul 2006
Ort: Potsdam / Berlin
38 Beiträge
 
#15

Re: Problem: TMemoryStream und JPEG Netzwerküberwachungssoft

  Alt 27. Sep 2006, 14:28
OK?! Naja, den Code hab ich nicht bei, da ich erst ewig woandershinlaufen muss um ans Internet zu kommen, weil es bei uns noch kein Internet gibt, aber ich habe noch ein wenig rumprobiert und das ganze dann auch theoretisch mit SendStream() hinbekommen! Das sieht dann, glaube ich, so aus:
Delphi-Quellcode:
var FStream: TFileStream //oder auch TMemoryStream
begin
//Screenshot wurde gemacht und unter 'C:\screenshot.jpg' abgespeichert
FStream := FStream.Create('C:\screenshot.jpg', fmOpenRead);
SendStream(FStream);
end;
Nun zum nächsten Problem: Ich versende ja alle möglichen Informationen per SendText und empfange sie auch wieder mit ReceiveText, aber der Stream ist irgendwie auch nur Text und nun habe ich ein einfaches Trennungsproblem! Ich empfange den Stream und speichere ihn da, wo Chatdaten oder Befehle ankommen! Wenn ich bestimmte Buchstabenfolgen vor das zu sendenden Datum setzte (z.B. '#NA' + Nachricht oder '#Screenshot' für den Screenshotbefehl), verwirft Delphi den empfangenen Text gleich nachdem ich ihn das erste mal abgefragt habe, wenn ich ihn nicht vollständig in eine Variable speichere!
Ich hab hier eine Lösungstheorie, weiß aber nicht, ob und wie sie funktioniert: Man müsste den Stream, der ja sowieso als Text ankommt von String wieder in einen TFile- oder TMemoryStream umwandeln und ihn dann dem bereits konstruierten Stream übergeben und ihn die einzelnen Teile zusammenfügen lassen.
Was sagt ihr dazu? Ist das möglich? Gibt es eine sauberere Lösung?

P.S.: Wenn ihr mir einen vollen Stream-Quelltext postet, dann bitte einen für TMemoryStream, weil ich eigentlich meine JPEG-Datei nicht auf der Festplatte zwischenspeichern möchte, da das viel zu langsam ist.
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#16

Re: Problem: TMemoryStream und JPEG Netzwerküberwachungssoft

  Alt 27. Sep 2006, 15:04
Tja, der Socket überträgt die Daten einfach, ihn interessiert der Inhalt und Aufbau nicht. Daher musst du zur sauberen Trennung dir ein Protokoll ausdenken. Du könntest zum Beispiel die Grösse der nachfolgenden binären Daten vorher übertragen, dann weiss der Client auch wie lange er es in den Memory Stream zu schreiben hat und wann er es interpretieren soll. Deine Lösung wäre in so fern problematisch, wenn die binäre Datei die gleichen Zeichen enthält wie deine Ende-Markierung vom Stream. Dies kann immer vorkommen - z.B. wenn du deinen Beitrag über dein Programm versendest. Daher bietet sich die Lösung, die Grösse zuvor zu übertragen, an, da sie die Interpretation der Daten verhindert und somit eine Fehlinterpretation der Daten.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 11:25 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz