![]() |
Re: Problem: TMemoryStream und JPEG Netzwerküberwachungssoft
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! |
Re: TMemoryStream, JPEG-Übertragung: Bitte helft!
Zitat:
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. |
Re: Problem: TMemoryStream und JPEG Netzwerküberwachungssoft
Danke, hat mir trotzdem nicht weitergeholfen, aber Capacity hat irgendwie die selbe Funktion! Ich glaube ich probier das mit den Indys jetzt nochmal!
|
Re: Problem: TMemoryStream und JPEG Netzwerküberwachungssoft
Zitat:
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? |
Re: Problem: TMemoryStream und JPEG Netzwerküberwachungssoft
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:
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!
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; 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. |
Re: Problem: TMemoryStream und JPEG Netzwerküberwachungssoft
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.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:48 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