![]() |
UDPSendBuffer(indy9): Binäre Daten in String buffer Senden?
Hallo zusammen,
ich muss erstmal sagen, dass ich ein neuling in Delphi-Welt bin. meine Frage ist, wie kann ich binäre Daten in einem String-Buffer senden?
Delphi-Quellcode:
wie ihr sieht, die Indy-Funktion erwartet hier ein String-Parameter, wie kann ich binäre Daten darein schreiben?
UDPServer.SendBuffer(AHost:String;APort:String,AData:String,Length:Integer);
Danke! |
Re: UDPSendBuffer(indy9): Binäre Daten in String buffer Send
Delphi-Quellcode:
var
data:sring; begin data := #27#0#0#255; // binäre Daten data := data +Chr(15)+Chr(x); // so geht's auch |
Re: UDPSendBuffer(indy9): Binäre Daten in String buffer Send
Danke für deine Antwort.
Aber muss man jedes Byte manuell reinschreiben, gibt es keine andere Lösung, was ist wenn ich z.B. ein ganze "array[0..512] of byte" darein kopieren will? Danke. |
Re: UDPSendBuffer(indy9): Binäre Daten in String buffer Send
Zitat:
Delphi-Quellcode:
Man muss bei Move() genau aufpassen, was man tut, sonst ist der Speicher kaputt -> Absturz droht
var
buffer:array[0..511] of Byte; s : string; begin // angenommen in buffer sind schon Daten SetLength(s, sizeof(buffer)); // Speicher reservieren // jetzt wird's Tricky // Move() nimmt eigentlich zwei Zeiger für Quelle und Ziel entgegen // man muss bei einem Array das 1. Element angeben // bei einem String beginnt die Zählung bei 1 Move(buffer[0], s[1], sizeof(buffer)); Am Besten, man verwendet nur AnsiStrings als Puffer für binäre Daten. Das ist angenehmer als diese array of Byte. |
Re: UDPSendBuffer(indy9): Binäre Daten in String buffer Send
Vielen Dank.
Noch eine Frage, kann man das irgendwie nicht mit TStringStream machen? das wäre vielleicht sicherer was Bereichsprüfung angeht oder? |
Re: UDPSendBuffer(indy9): Binäre Daten in String buffer Send
Zitat:
Delphi-Quellcode:
var
stream : TStringStream; begin stream := TStringStream.Create; stream.WriteBuffer(buffer[0], sizeof(buffer)); // buffer ist ein array of byte // jetzt kann man UDPServer.SendBuffer(AHost:String;APort:String; stream.DataString, stream.Size); // oder vielleicht noch eleganter stream.Position := 0; // Achtung: Stream muss auf Anfang gesetzt werden UDPServer.SendStream(AHost,APort:String, stream); stream.Free; // nicht vergessen! |
Re: UDPSendBuffer(indy9): Binäre Daten in String buffer Send
Sorry für die blöde Frage, der Kompiler findet diesen Fehler "nicht genügend wirkliche Parameter "
und zeigt auf diese Zeile:
Delphi-Quellcode:
Habe ich etwa was vergessen?
stream := TStringStream.Create;
|
Re: UDPSendBuffer(indy9): Binäre Daten in String buffer Send
Zitat:
Delphi-Quellcode:
stream := TStringStream.Create(''); // mit Leerstring erzeugen
|
Re: UDPSendBuffer(indy9): Binäre Daten in String buffer Send
Super, jetzt zeigt er diesen Fehler nicht mehr aber diesen:
[Fehler] MPDLOG_MAIN.pas(324): Konstantenobjekt kann nicht als Var-Parameter weitergegeben werden Im Bezug auf die 2.Zeile:
Delphi-Quellcode:
Bin_Buffer ist so definiert:
StreamBuffer.WriteBuffer(Bin_Buffer[0], 3);
UDPServer.SendBuffer(IP_Adresse,UDP_PORT,StreamBuffer.DataString,3);
Delphi-Quellcode:
Ich danke dir vielmals für deine Hilfe.
const
Bin_Buffer :array[0..2] of byte = ( $01, $02, $03 ); |
Re: UDPSendBuffer(indy9): Binäre Daten in String buffer Send
Ich habe das Problem gelöst, und zwar ich habe stream.DataString in eine String-Variable zwischengespeichert und sie als Parameter übergegeben.
Jetzt werden die Daten gesendet nur das Problem ist, dass der Inhalt Falsch ist. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:15 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