![]() |
indy 9 wenn nur ein teil vom buffer gesendet wurde,abbrechen
hi,
empfange meine daten in einem buffer
Delphi-Quellcode:
hier wird der buffer empfangen
TMyBufferGros = record
int : integer; text : string[50]; end; TMyBufferKlein = record text : string[10]; end;
Delphi-Quellcode:
wenn jetzt aber mybufferklein gesendet wird der readbuffer ja nicht beendet weil mybuffergros größer wie mybufferklein ist. Was kann ich da machen?
AThread.Connection.ReadBuffer(mybufferGros,sizeof(TMyBufferGros));
Probiert habe ich es mit
Delphi-Quellcode:
wenn ich aber erst mybufferklein sende wird zwar ein timeout ausgelöst aber die daten stecken noch irgend wo im speicher, wenn ich dann den richtigen buffer also mybuffergros schicke stimmen die daten nicht.
AThread.Connection.ReadTimeout := 2000;
try AThread.Connection.ReadBuffer(mybufferGros,sizeof(tmybufferGros)); ... except On E : EIdReadTimeout do begin bTimeOut := true; exit; end; end; //daten verarbeiten hoffe ihr wist was ich meine, ist schwer zu erklären..... |
Re: indy 9 wenn nur ein teil vom buffer gesendet wurde,abbre
am besten alles per TMyBufferGros senden, da ReadBuffer erst wieder zurückkehrt, wenn die angegebenen Anzahl der Byte empfangen worden ist.
Alternativ ReadLn |
Re: indy 9 wenn nur ein teil vom buffer gesendet wurde,abbre
Zitat:
|
Re: indy 9 wenn nur ein teil vom buffer gesendet wurde,abbre
ok könnte ich machen, aber was ist wenn mal ein falscher buffer gesendet wurde?
dann muss ich doch irgend wie wieder "von vorne" anfangen können.
Delphi-Quellcode:
AThread.Connection.ReadTimeout := 2000;
try AThread.Connection.ReadBuffer(mybufferGros,sizeof(tmybufferGros)); ... except On E : EIdReadTimeout do begin AThread.Connection.Clear; //irgend wie so bTimeOut := true; exit; end; end; //daten verarbeiten |
Re: indy 9 wenn nur ein teil vom buffer gesendet wurde,abbre
Zitat:
Grundlegend: Du brauchst ein Protokoll um deine Daten zu verwalten und zu organisieren. Der Vorschlag mit dem Byte stellt schon ein solches Protokoll dar. Auch nochmal eine andere Frage: ich selber habe noch nie mit den Indys gearbeitet, aber kann man nicht vorher abfragen wieviele Bytes empfangen wurden bzw. zur Abholung bereit stehen? Bei den alten Socket Komponenten konnte man dies machen und so konnte man einfach entscheiden, ob man nochmal auf den nächsten Aufruf warten ohne was zu machen (wenn die Bytes kleiner waren als die Struktur gross ist) oder ob man den Buffer einliest. |
Re: indy 9 wenn nur ein teil vom buffer gesendet wurde,abbre
Zitat:
Überlege dir vorher bis ins kleinste Detail, wie Server und Client miteinander kommunizeren. Welche Botschaften gibt es? In welcher Reihenfolge werden die Botschaften ausgetauscht? Edit: hab jetzt zum zweiten Mal keinen roten Kasten bekommen, obwohl zwischenzeitlich jemand anders gepostet hat :gruebel: |
Re: indy 9 wenn nur ein teil vom buffer gesendet wurde,abbre
ein protokoll habe ich.
Wenn die prüfsumme falsch ist kann ich eine meldung schicken. aber nicht wenn irgend welche daten kommen die schrott sind. dann werde ich halt rigoros die verbindung trennen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:24 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