Entwickler-Ecke

Internet / Netzwerk - TCP Daten per Indy werden nicht richtig gesendet


ThomasEi - Sa 28.01.12 16:42
Titel: TCP Daten per Indy werden nicht richtig gesendet
Hallo,

ich habe ein Problem, dass die TCP Daten per Indy nicht richtig gesendet werden.
Diese werden verändert als würden Zeichen größer $7F nicht zulässig sein.

Warum? Was mache ich falsch? Wie kann man dies machen?


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure TForm1.Button1Click(Sender: TObject);
var s : string;
begin
  IdTCPClient1.Host := IPAdresse.Text;
  IdTCPClient1.Port := StrToInt(Port.Text);
  IdTCPClient1.Connect;

  s := #$03+#$00+#$8F+#$14+#$FF+#$05+#$0C+#$30// das möchte ich gern senden
  Form1.IdTCPClient1.IOHandler.Write(s);
  // $03 $00 $3f $14 $79 $05 $0c $30 => das wird aber gesendet, laut Wireshark

  if IdTCPClient1.Connected then IdTCPClient1.Disconnect;
end;


jaenicke - Sa 28.01.12 16:55

Indy wandelt die Zeichensätze leider ungefragt um, das musste ich auch schon feststellen. Irgendwo kann man das Encoding explizit angeben, aus dem Kopf weiß ich nicht wo. Ich kann aber schauen, wenn du das nicht selbst findest. Schau einfach mal nach Encoding oder so.

Ich glaube das konnte man als weiteren Parameter an Write übergeben.


ThomasEi - Sa 28.01.12 17:28

DANKE für den Tipp, so funktioniert es


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
procedure TForm1.Button1Click(Sender: TObject);
var s : string;
begin
  IdTCPClient1.Host := IPAdresse.Text;
  IdTCPClient1.Port := StrToInt(Port.Text);
  IdTCPClient1.Connect;

  s := #$03+#$00+#$8F+#$14+#$FF+#$05+#$0C+#$30;
  Form1.IdTCPClient1.IOHandler.Write(s, TEncoding.Default);

  if IdTCPClient1.Connected then IdTCPClient1.Disconnect;
end;