AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi TClientSocket - SendText (AnsiString), ReceiveText (String)
Thema durchsuchen
Ansicht
Themen-Optionen

TClientSocket - SendText (AnsiString), ReceiveText (String)

Ein Thema von XoRiC · begonnen am 25. Mär 2010 · letzter Beitrag vom 26. Mär 2010
Antwort Antwort
XoRiC

Registriert seit: 20. Sep 2005
43 Beiträge
 
RAD-Studio 2009 Arc
 
#1

TClientSocket - SendText (AnsiString), ReceiveText (String)

  Alt 25. Mär 2010, 13:44
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:
procedure TForm1.Button1Click(Sender: TObject);
  var D: AnsiString;
begin
  D := 'Hallo!';
  ClientSocket1.Socket.SendText(D); { SendText(const S: AnsiString) }
end;
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.

Delphi-Quellcode:
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;
Lediglich die Länge des Strings stimmt. Ich habe ein bisschen rumprobiert, aber auch so klappt es nicht:

Delphi-Quellcode:
procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket);
  var D: AnsiString;
begin
  D := AnsiString(Socket.ReceiveText);
  showmessage(D); // gibt wie oben auch Mist aus
end;
Daraufhin habe ich mal die Strings als CharArray ausgeben lassen:
- 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
"Gods are fragile things; they may be killed by a whiff of science or a dose of common sense."
- Chapman Cohen
  Mit Zitat antworten Zitat
samso

Registriert seit: 29. Mär 2009
439 Beiträge
 
#2

Re: TClientSocket - SendText (AnsiString), ReceiveText (Stri

  Alt 25. Mär 2010, 18:29
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;
  Mit Zitat antworten Zitat
XoRiC

Registriert seit: 20. Sep 2005
43 Beiträge
 
RAD-Studio 2009 Arc
 
#3

Re: TClientSocket - SendText (AnsiString), ReceiveText (Stri

  Alt 25. Mär 2010, 20:01
'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
"Gods are fragile things; they may be killed by a whiff of science or a dose of common sense."
- Chapman Cohen
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.004 Beiträge
 
Delphi 2009 Professional
 
#4

Re: TClientSocket - SendText (AnsiString), ReceiveText (Stri

  Alt 26. Mär 2010, 17:47
Zitat von samso:
Also, ich würde denken, da hat CG einen kleinen Bug eingebaut. Bei Delphi 2010 ist TCustomWinSocket.ReceiveText ein AnsiString.
Was auch daran liegen könnte, dass TClient/TServerSocket seit vielen Delphi Versionen als 'deprecated' bezeichnet wird, und vermutlich nur noch für die eher "abenteuerlustigen" Entwickler weiterhin enthalten ist
Michael Justin
  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 23:19 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