![]() |
TClientSocket - SendText (AnsiString), ReceiveText (String)
Hi,
ich habe noch kleinere Schwierigkeiten mit der Umstellung eines älteren Projekts auf UniCode seit ich Delphi 2009 verwende. Ich sende mit einer TClientSocket Komponente Text an einen Server. Die SendText Prozedur im Client verlangt dabei als Parameter const S: AnsiString, was mir ganz recht ist, da ich ausschließlich Ascii-Zeichen sende und in meinem Projekt eigentlich keinen Unicode brauche. Hier ein Minimalbeispiel:
Delphi-Quellcode:
Daraufhin empfängt der Server den Text. Die ReceiveText Funktion des Sockets liefert jedoch keinen AnsiString, sondern einen String zurück, was ja nun UniCode sein sollte.
procedure TForm1.Button1Click(Sender: TObject);
var D: AnsiString; begin D := 'Hallo!'; ClientSocket1.Socket.SendText(D); { SendText(const S: AnsiString) } end;
Delphi-Quellcode:
Lediglich die Länge des Strings stimmt. Ich habe ein bisschen rumprobiert, aber auch so klappt es nicht:
procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket);
var D: String; begin D := Socket.ReceiveText; { ReceiveText: String } showmessage(D); // gibt Mist aus (chinesische Zeichen wenn ich mich nicht irre) showmessage(AnsiString(D)); // gibt auch Mist aus ('???ton' oder so ähnlich) end;
Delphi-Quellcode:
Daraufhin habe ich mal die Strings als CharArray ausgeben lassen:
procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket);
var D: AnsiString; begin D := AnsiString(Socket.ReceiveText); showmessage(D); // gibt wie oben auch Mist aus end; - Der Client sendet 72, 97, 108, 108, 111, 33 ('Hallo!'). - Der Server empfängt 24904, 27756, 8559, 116, 111, 110. Kann jemand sagen was ich falsch mache, bzw wo ich den Code abändern muss um in der TServerSocket Komponente den originalen Text 'Hallo!' zu bekommen? Am besten gleich als AnsiString ;) Viele Grüße und Danke für Tipps, Xoric |
Re: TClientSocket - SendText (AnsiString), ReceiveText (Stri
Also, ich würde denken, da hat CG einen kleinen Bug eingebaut. Bei Delphi 2010 ist TCustomWinSocket.ReceiveText ein AnsiString. Vielleicht geht ja folgendes:
Delphi-Quellcode:
procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket);
var D: AnsiString; begin SetLength(D, Socket.ReceiveLength); SetLength(D, Socket.ReceiveBuf(Pointer(D)^, Length(D))); showmessage(D); // gibt hoffentlich keinen Mist aus end; |
Re: TClientSocket - SendText (AnsiString), ReceiveText (Stri
'Hallo!'
Das freut mich fast ein bisschen, dass es mal nicht an mir liegt. Vielen Dank für den Hinweis und insbesondere den Trick, wie ich das Problem umgehen kann! Wie du oben siehst funktioniert es wunderbar ;) Viele Grüße Xoric |
Re: TClientSocket - SendText (AnsiString), ReceiveText (Stri
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:04 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