AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Indy 10 client <STX>Daten<ETX> senden

Indy 10 client <STX>Daten<ETX> senden

Ein Thema von Grizu · begonnen am 29. Aug 2016 · letzter Beitrag vom 30. Aug 2016
Antwort Antwort
Grizu

Registriert seit: 22. Aug 2016
20 Beiträge
 
Delphi 10.1 Berlin Professional
 
#1

Indy 10 client <STX>Daten<ETX> senden

  Alt 29. Aug 2016, 19:30
Hallo,
vielleicht kann jemand helfen.
ich habe einen Indy10 Client, der sich zu einem Server verbindet, nun möchte ich Daten die in einem TEdit stehen zum Server senden.
Dieser erwartet das die Daten in folgendem Format kommen: <STX>Daten<ETX>

Ich habe da nun heute einiges versucht, aber es funktioniert nicht.

zuletzt habe ich folgendes probiert:

Delphi-Quellcode:
MIRec.values := txt_interface_msc_sendstring.text;
  Buffer := RawToBytes(MIRec, SizeOf(MIRec));
  msc_client.IOHandler.Write(Buffer);
vorher habe ich das EDIT mal byteweise in ein TID Bytes gelesen
und dann vorher 02 für ETX und hinterher 03 für STX angehangen. Funktionierte aber auch nicht.
Delphi-Quellcode:
begin
a := Length(txt_interface_msc_sendstring.text);
dat := txt_interface_msc_sendstring.text;

i1 := 1;
i2 := 1;
setlength(s, i1);

s[0] := 02; // STX


for i := 1 to a do begin
i1 := i1 + 1;
setlength(s, i1);
s[i1] := ord(dat[i2]);
i2 := i2 + 1;
end;
i1 := i1 + 1;
setlength(s, i1);
edit3.Text := inttostr(i1);
s[i1] := 3; // ETX
a := length(s);
msc_client.IOHandler.Write(s);
Weiß jemand wie das geht???

Geändert von Grizu (29. Aug 2016 um 19:34 Uhr)
  Mit Zitat antworten Zitat
SvB

Registriert seit: 21. Okt 2004
Ort: Eckenroth
426 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#2

AW: Indy 10 client <STX>Daten<ETX> senden

  Alt 29. Aug 2016, 21:38
Hallo,

wenn Du nur die 2 oder 3 sendest, dann wird die dezimale Zahl gesendet, in deinem Fall die 50 und die 51. Schau Dir mal eine ASCII-Tabelle an.
In Deinem Fall willst Du aber den dezimalen Wert 2 und 3 senden.
Du kannst das so machen:
Delphi-Quellcode:
s[0] := #2; // STX
s[i1] := #3; // ETX
Das sollte funktionieren
Sven

Alle sagen, das geht nicht. Da kam einer, der wusste das nicht und hat es gemacht.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.014 Beiträge
 
Delphi 12 Athens
 
#3

AW: Indy 10 client <STX>Daten<ETX> senden

  Alt 29. Aug 2016, 21:51
s scheint ein Byte-Array zu sein. Definition nicht mit gepostet und diese Info im Text versteckt.
(S ist ein blöder name, weil das Viele für eine "String"-Variable verwenden)

Pssst, er sendet eine 2 (Byte) und keine '2' (Char #50 ), also praktich ist das schon deine #2 (Char)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
CarlAshnikov

Registriert seit: 18. Feb 2011
Ort: Erfurt
108 Beiträge
 
Delphi XE5 Enterprise
 
#4

AW: Indy 10 client <STX>Daten<ETX> senden

  Alt 30. Aug 2016, 07:28
Ich würde das ganz einfach folgendermaßen machen:
Delphi-Quellcode:
var
  Daten: string;

msc_client.IOHandler.Write(chr(2) + Daten + chr(3));
Sebastian
Das kann ja wohl nicht var sein!
  Mit Zitat antworten Zitat
Grizu

Registriert seit: 22. Aug 2016
20 Beiträge
 
Delphi 10.1 Berlin Professional
 
#5

AW: Indy 10 client <STX>Daten<ETX> senden

  Alt 30. Aug 2016, 11:20
Hi,

erst mal danke für eure Ideen.

Also:
Delphi-Quellcode:
s[0] := #2; // STX
 s[i1] := #3; // ETX
Dann kommt die Fehlermeldung inkompatible Typen, weil s ein TiDBytes ist.

Delphi-Quellcode:
var
   Daten: string;

 msc_client.IOHandler.Write(chr(2) + Daten + chr(3));
Ist eine gute Idee, aber hier kompiliert er auch nicht. Wieder Fehlermeldung inkompatible Typen.

Ich war der Meinung das
Delphi-Quellcode:
s[0] := 2; // STX
 s[i1] := 3; // ETX
die richtige Rahmung ist. Aber anscheinend nimmt der Server das nicht an........
Ich versuch es mal weiter, aber danke euch für den Input.

hier nochmal der code mit der variablen Deklaration:
ich habe das s mal gegen BBytes ersetzt. Ist richtig s ist doof für ein Bytearray, sollte man nicht machen.

Delphi-Quellcode:
procedure TMain_Frm.btn_interface_msc_sendClick(Sender: TObject);
var
BBytes : TIDBytes;
dat, dattmp : String;
character : Char;
b : Byte;
i, a, i1, i2 : Integer;
begin
a := Length(txt_interface_msc_sendstring.text);
dat := txt_interface_msc_sendstring.text;

i1 := 1;
i2 := 1;
setlength(BBytes, i1);

BBytes[0] := 2; // STX


for i := 1 to a do begin
i1 := i1 + 1;
setlength(BBytes, i1);
BBytes[i1] := ord(dat[i2]);
i2 := i2 + 1;
end;

i1 := i1 + 1;
setlength(BBytes, i1);
BBytes[i1] := 3; // ETX

msc_client.IOHandler.Write(BBytes);
end;//*****************************************************************************************************************************************
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.753 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Indy 10 client <STX>Daten<ETX> senden

  Alt 30. Aug 2016, 11:30
Mir ist auch nicht ganz klar, warum Indy uns dieses Hindernis beschert hat, denn immerhin steht in der IdGlobal.pas: TIdBytes = array of Byte; Das ist ja nun wirklich kein Hexenwerk, aber man muss sich damit arrangieren, und immerhin produziert man damit delphibezogene SO-Einträge, was ja gut für die Popularität der Sprache ist

Aber die Unit IdGlobal bietet dann auch gleich die Lösung:
function ToBytes(beinahe alle erdenklichen Datentypen):TIdBytes; overload

Bau Deinen String und pack ihn als Argument da rein, fertig.

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
Grizu

Registriert seit: 22. Aug 2016
20 Beiträge
 
Delphi 10.1 Berlin Professional
 
#7

AW: Indy 10 client <STX>Daten<ETX> senden

  Alt 30. Aug 2016, 11:41
Hallo nochmal,

manchmal einfach Kaffee trinken gehen, Zigarette und dann geht's....


es ist tatsächlich sooooooo einfach:

Delphi-Quellcode:
procedure TMain_Frm.btn_interface_msc_sendClick(Sender: TObject);
var
dat : String;
begin
dat := txt_interface_msc_sendstring.text;

msc_client.IOHandler.Write(2);
msc_client.IOHandler.Write(dat);
msc_client.IOHandler.Write(3);
end;//*****************************************************************************************************************************************
Man muss einfach das STX und ETX in einer einzelnen Message schicken und zwischen drin dann den String.....

Danke Carl dein Ansatz hat mich darauf gebracht.....
  Mit Zitat antworten Zitat
Grizu

Registriert seit: 22. Aug 2016
20 Beiträge
 
Delphi 10.1 Berlin Professional
 
#8

AW: Indy 10 client <STX>Daten<ETX> senden

  Alt 30. Aug 2016, 11:49
So hab nochmal den Ansatz von Carl getestet und der geht natürlich auch.......

Bei mir war ja s ein TIDBytes deshalb meckert er, wenn man einen String nimmt geht's auch....

Delphi-Quellcode:
procedure TMain_Frm.btn_interface_msc_sendClick(Sender: TObject);
var
dat : String;
begin
dat := txt_interface_msc_sendstring.text;

msc_client.IOHandler.Write(chr(2) + dat + chr(3));
end;//*****************************************************************************************************************************************
Es ist also ein simpler 3 Zeiler......
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 13:05 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