AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Prism EConvert Error Fehler bei Socketverbindung
Thema durchsuchen
Ansicht
Themen-Optionen

EConvert Error Fehler bei Socketverbindung

Ein Thema von DocZenith · begonnen am 20. Apr 2006 · letzter Beitrag vom 20. Apr 2006
Antwort Antwort
DocZenith

Registriert seit: 8. Feb 2006
27 Beiträge
 
#1

EConvert Error Fehler bei Socketverbindung

  Alt 20. Apr 2006, 11:32
Hi!
Hab folgendes Problemchen:
Ich bekomme eine spontan auftretende Fehlermeldung. In der Meldung steht EConvert Error.
Dabei geht es um eine String Variable die über eine Socketverbinden alle 0,5 Sek. einen Wert
bekommt. Der Wert in der String Variable wird dann in in einen Integerwert umgewandelt und
in eine Integervariable gespeichert. In diesem Beispiel liegt wohl in der Integer oder String
variable 2 Werte drin (-5 und -20).

Delphi-Quellcode:
procedure TMainForm.ServerSocket1ClientRead(Sender: TObject;Socket: TCustomWinSocket);
var
wert: integer;

begin

  { MSG Wert auf Null gesetzt }
  MSG := '';
  wert := 0;
  { Daten werden vom Socket empfangen und gespeichert }
  MSG := Socket.ReceiveText;
  { Socketwert wird in Interger umgewandelt und in Wert gespeichert }
  wert:= strtoint(msg);
  { MSG Wert wieder auf Null gesetzt, damit keine doppelten Einträge geschrieben werden }
  MSG := '';
  { Ausgabe des aktuellen Differenzwertes }
  edit2.Text:= inttostr(wert);
  { Übergabe des Differenzwertes an die Regler Prozedur für die entsprechene Regellung }
  regler(wert);
end;
http://timely.de/image001.jpg
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#2

Re: EConvert Error Fehler bei Socketverbindung

  Alt 20. Apr 2006, 11:52
Einfache Antwort: Du brauchst ein Protokoll!

Wenn du mit SendText oder sonstwie Daten abschickst, dann können die noch kleineren Einzelteilen oder viel grösseren Stücken wieder ankommen. Der Socket überträgt nur die Daten, ihn kümmert es nicht, wo du einen Block teilst. Das bedeutet, wenn du 2x SendText('a'); aufrufst, dann wirst du auf der Gegenseite nicht 2x ReceiveText aufrufen müssen - ganz im Gegenteil. Es ist sogar recht wahrscheinlich, dass du mit einmaligen ReceiveText beide Inhalte auf einmal empfängst.

Und um nun zu unterscheiden wo ein Block aufhört und der nächste anfängt, müsstest du dir ein Protokoll ausdenken, was dir diese Teilung ermöglicht und auch die Möglichkeit bietet zu erkennen, ob du einen Block schon komplett empfangen hast, um ihn zu verarbeiten. Ein einfaches Protokoll wäre in diesem Falle schon einfach nur ein Zeichen, was du so nicht nutzt - z.B. das Leerzeichen in deinem Falle (wenn es nur Zahlen sind). Dann weisst du immer, dass zwischen 2 Leerzeichen ein Wert steht. Bzw. bis zum nächsten Leerzeichen, etc.

Aber da kannst du deine Fantasie am Protokoll auslassen...

heute haargenau 2 Jahre in der dp.net unterwegs...
  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 02:07 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