AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi UDPSendBuffer(indy9): Binäre Daten in String buffer Senden?
Thema durchsuchen
Ansicht
Themen-Optionen

UDPSendBuffer(indy9): Binäre Daten in String buffer Senden?

Ein Thema von Rifman · begonnen am 21. Mär 2008 · letzter Beitrag vom 22. Mär 2008
Antwort Antwort
Rifman

Registriert seit: 21. Mär 2008
Ort: Frankfurt am Main
54 Beiträge
 
Delphi 5 Standard
 
#1

UDPSendBuffer(indy9): Binäre Daten in String buffer Senden?

  Alt 21. Mär 2008, 23:31
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?
UDPServer.SendBuffer(AHost:String;APort:String,AData:String,Length:Integer); wie ihr sieht, die Indy-Funktion erwartet hier ein String-Parameter, wie kann ich binäre Daten darein schreiben?
Danke!
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#2

Re: UDPSendBuffer(indy9): Binäre Daten in String buffer Send

  Alt 22. Mär 2008, 01:30
Delphi-Quellcode:
var
 data:sring;
begin
 data := #27#0#0#255; // binäre Daten
 data := data +Chr(15)+Chr(x); // so geht's auch
  Mit Zitat antworten Zitat
Rifman

Registriert seit: 21. Mär 2008
Ort: Frankfurt am Main
54 Beiträge
 
Delphi 5 Standard
 
#3

Re: UDPSendBuffer(indy9): Binäre Daten in String buffer Send

  Alt 22. Mär 2008, 14:02
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.
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#4

Re: UDPSendBuffer(indy9): Binäre Daten in String buffer Send

  Alt 22. Mär 2008, 14:46
Zitat von Rifman:
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?
Du kannst auch kopieren; man muss dann aber etwas aufpassen, denn dann wird's Low-Level & "Hardcore"

Delphi-Quellcode:
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));
Man muss bei Move() genau aufpassen, was man tut, sonst ist der Speicher kaputt -> Absturz droht
Am Besten, man verwendet nur AnsiStrings als Puffer für binäre Daten.
Das ist angenehmer als diese array of Byte.
  Mit Zitat antworten Zitat
Rifman

Registriert seit: 21. Mär 2008
Ort: Frankfurt am Main
54 Beiträge
 
Delphi 5 Standard
 
#5

Re: UDPSendBuffer(indy9): Binäre Daten in String buffer Send

  Alt 22. Mär 2008, 15:02
Vielen Dank.
Noch eine Frage, kann man das irgendwie nicht mit TStringStream machen? das wäre vielleicht sicherer was Bereichsprüfung angeht oder?
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#6

Re: UDPSendBuffer(indy9): Binäre Daten in String buffer Send

  Alt 22. Mär 2008, 15:19
Zitat von Rifman:
Noch eine Frage, kann man das irgendwie nicht mit TStringStream machen? das wäre vielleicht sicherer was Bereichsprüfung angeht oder?
Ja, das geht auch:
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!
  Mit Zitat antworten Zitat
Rifman

Registriert seit: 21. Mär 2008
Ort: Frankfurt am Main
54 Beiträge
 
Delphi 5 Standard
 
#7

Re: UDPSendBuffer(indy9): Binäre Daten in String buffer Send

  Alt 22. Mär 2008, 15:45
Sorry für die blöde Frage, der Kompiler findet diesen Fehler "nicht genügend wirkliche Parameter "
und zeigt auf diese Zeile:
stream := TStringStream.Create; Habe ich etwa was vergessen?
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#8

Re: UDPSendBuffer(indy9): Binäre Daten in String buffer Send

  Alt 22. Mär 2008, 15:51
Zitat von Rifman:
Sorry für die blöde Frage, der Kompiler findet diesen Fehler "nicht genügend wirkliche Parameter "
und zeigt auf diese Zeile:
stream := TStringStream.Create;
Achja, TStringStream will im Konstruktor einen Initialisierungswert haben:
stream := TStringStream.Create(''); // mit Leerstring erzeugen
  Mit Zitat antworten Zitat
Rifman

Registriert seit: 21. Mär 2008
Ort: Frankfurt am Main
54 Beiträge
 
Delphi 5 Standard
 
#9

Re: UDPSendBuffer(indy9): Binäre Daten in String buffer Send

  Alt 22. Mär 2008, 16:17
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:
StreamBuffer.WriteBuffer(Bin_Buffer[0], 3);
UDPServer.SendBuffer(IP_Adresse,UDP_PORT,StreamBuffer.DataString,3);
Bin_Buffer ist so definiert:
Delphi-Quellcode:
const
Bin_Buffer :array[0..2] of byte = ( $01,
                                    $02,
                                    $03 );
Ich danke dir vielmals für deine Hilfe.
  Mit Zitat antworten Zitat
Rifman

Registriert seit: 21. Mär 2008
Ort: Frankfurt am Main
54 Beiträge
 
Delphi 5 Standard
 
#10

Re: UDPSendBuffer(indy9): Binäre Daten in String buffer Send

  Alt 22. Mär 2008, 17:29
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.
  Mit Zitat antworten Zitat
Antwort Antwort


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 04:46 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