AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Strings senden

Ein Thema von halinchen · begonnen am 12. Dez 2006 · letzter Beitrag vom 17. Dez 2006
Antwort Antwort
Benutzerbild von halinchen
halinchen

Registriert seit: 13. Jun 2006
508 Beiträge
 
Delphi 2007 Professional
 
#1

Strings senden

  Alt 12. Dez 2006, 18:21
Hi!

Also ich möchte einen Record übers Netzwerk schicken.
Der sieht in der 1.Version so aus:
Delphi-Quellcode:
Type TMessageRec = Record
             Code : shortstring;
             Nickname : shortstring;
             CName : shortstring;
             Mail : shortstring;
             end;
aber ich will mehr als 255 Zeichen schicken!
Delphi-Quellcode:
Type TMessageRec = Record
             Code : string;
             Nickname : string;
             CName : string;
             Mail : string;
             end;
Ich mach da mit WriteBuffer
Delphi-Quellcode:
var
Rec:TMessageRec;
...
try
   try
   Client.Connect(TimeO);
   Client.WriteBuffer(Rec,SizeOf(Rec));
   finally
   Client.Disconnect;
   Client.Free;
   end;
except
Error := true;
end;
...
Nun kommt es zu einem Laufzeitfehler!!!
Die Indy-Komponente erzeugt den. (Also der Fehler kommt nicht immer, aber im Debug-Modus immer so wenns bei einem Memo was einfügt. Der Cursor springt dann aber in den Quelltext der Indy-Kompo)

http://www.delphipraxis.net/internal...strings+senden
Da steht das man keine Strings senden kann. Kann man das irgentwie umgehen? Ich würde gerne mehr als 255 Zeichen senden!

Hoffentlich könnt ihr mir helfen! Wäre echt nett
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#2

Re: Strings senden

  Alt 12. Dez 2006, 18:40
Guck dir mal mein Protokoll an ... zu finden in der CodeLib ...

http://www.delphipraxis.net/internal...ight=protokoll
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#3

Re: Strings senden

  Alt 12. Dez 2006, 18:45
Hi,

du erhältst einen Fehler, wenn du etwas in ein Memo einfügen willst, aber den Code dazu hast du gar nicht gezeigt.

Mit den langen Strings ist das so eine Sache. Woher soll der Empfänger wissen, wielange dieser String ist? Beim ShortString sind das 256 Byte, ein Byte Längeninformation und 255 Byte für den Zeichen-Puffer. Bei langen Strings musst du die Länge zuerst als Integer schicken, damit der Empfänger einen Puffer anlegen kann und danach die Zeichen des Strings. Dann hat der Empfänger eine Chance - wenn er weiß, dass zuerst die Längeninformation kommt. Die String-Variable ist bei langen Strings intern nichts anderes als ein Zeiger auf den Puffer.

Freundliche Grüße
  Mit Zitat antworten Zitat
Benutzerbild von halinchen
halinchen

Registriert seit: 13. Jun 2006
508 Beiträge
 
Delphi 2007 Professional
 
#4

Re: Strings senden

  Alt 13. Dez 2006, 16:27
Erstmal Danke für eure Hilfe.

Ich hab den Code nicht gezeigt, da ich dachte wenn der Cursor zur Indy-Kompo springt liegt der Fehler nicht an mir. Ich wollte das Problem nur so genau wie möglich beschreiben.

Das mit dem Zeiger habe ich mir schon gedacht.
Wie groß ist denn aber nun 1 Zeichen in einem String? 1 Byte oder 2 Byte? Ich glaube da gibt es Zeichentypen mit 2 Byte pro Zeichen.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#5

Re: Strings senden

  Alt 13. Dez 2006, 17:04
Hi,

Zitat von halinchen:
Wie groß ist denn aber nun 1 Zeichen in einem String? 1 Byte oder 2 Byte?
kommt drauf an. Bei deinen ShortStrings oder den AnsiStrings ist ein Zeichen in der Regel ein Byte. Nur wenn du DBCS bzw. MBCS verwendest sind es zwei oder mehr Bytes pro Zeichen. Ist aber kein Problem für die Übermittlung der Puffergröße. Bei WideStrings muss der Empfänger halt wissen, dass er die Daten wieder als WideString ablegen soll. Alles andere kann wieder in einem AnsiString untergebracht werden.

Freundliche Grüße
  Mit Zitat antworten Zitat
Benutzerbild von halinchen
halinchen

Registriert seit: 13. Jun 2006
508 Beiträge
 
Delphi 2007 Professional
 
#6

Re: Strings senden

  Alt 13. Dez 2006, 18:30
Danke!
Jetzt weiß ich wie ichs machen muss.

  Mit Zitat antworten Zitat
Benutzerbild von halinchen
halinchen

Registriert seit: 13. Jun 2006
508 Beiträge
 
Delphi 2007 Professional
 
#7

Re: Strings senden

  Alt 17. Dez 2006, 10:20
Hi!

Ich bins nochmal.
Ich glaube was wir besprochen habe ist total quatsch.
Denn ich hab mal einen langen String als Test in einen MemoryStream geschrieben. Das geht nur mit SizeOf.
Außerdem nochmal mein Prog durch getestet: Der Fehler kommt ja nicht immer. Und wenn keiner kommt kommen auch mehr als 255 Zeichen an.

Ich glaube die Zugriffsverletzung komm wo anders her.
Und da ich nur "Bei Exception anhalten" aktiviert hat, hats mit der nächsten Anweisung weitergemacht, also im Thread von Indy. Sorry

Naja, trotzdem nochmal vielen Danke.

halinchen

P.S. Kann man das Thema hier löschen? Ist ja eigentlich sinnlos das stehen zu lassen.
  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 06:16 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