Hallo,
zunächst möchte ich mich bei Narses für dessen
super Anleitungen bzgl. Netzwerkkommunikation bedanken. Ich nutze eine aufgebohrte Version auf einem Linux-Server. Leider nutzen die Sockets von Borland die VCL, so dass ich eine VM mit Windows brauche.
Ein Ausweg sind die Indys. Ich versuche gerade nach 10 Jahren wieder in das Thema zu kommen. Leider scheitere ich daran, dass es mir mit den Indys irgendwie nicht gelingen will, AnsiStrings (für Header und Daten) "verlustfrei" zu versenden.
Natürlich habe ich die Suche benutzt und habe diverse Dinge gefunden. Leider klappt aber folgender Code bei mir nicht:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27:
| Procedure TMainForm.Button1Click(Sender: TObject); Var Command : TCmdSeq; Begin Command:= TCmdSeq.Create($4711); Try Memo1.Lines.Append(Dump(Command.Frames)); Client.Socket.WriteLn(Command.Frames, IdGlobal.IndyTextEncoding_8Bit); Finally Command.Free; End; End;
Procedure TMainForm.ServerExecute(AContext: TIdContext); Var BinMessage : AnsiString; Begin If AContext.Connection.Socket.Readable Then Begin BinMessage:= AContext.Connection.Socket.ReadLn( IdGlobal.IndyTextEncoding_8Bit); Memo1.Lines.Append( IntToStr(Length(BinMessage)) + ' Zeichen gelesen: ' + #13#10 + Dump(BinMessage)); End; End; |
TCmdSeq arbeitet intern natürlich mit AnsiString und liefert auch das richtige Ergebnis
vor dem versenden. Wenn ich das durchlaufen lasse, erhalte ich folgende Ausgabe:
Quelltext
1: 2: 3:
| 04 00 00 80 01 00 11 47 8 Zeichen gelesen: 04 00 00 3F 01 00 11 47 |
Wie schaffe ich es, dass die Indys meinen AnsiString auch als solches behandeln und nicht "kaputt" machen?
Gruß, Alex