![]() |
ReceiveBuf empfängt 2 Pakete mit einmal! Wie verhinderen?
Halllo!
Hab nen großes Problem! Ich nutze die tserversocket und tclientsockt komponenten von delphi 5. Ich initialisere den client und den server korrekt und das funktioniert auch alles. Nun mein Problem. Wenn ich beispielsweise 2 Nachrichten hintereinander verschicke.
Code:
Und dann bei OnRead dieses beim Server mache
Socket.SendBuf(variabl1e5); // Variable ist 5 Byte groß
Socket.SendBuf(variabl1e4); // Variable ist 4 Byte groß
Code:
--> Mal wird die aktion 2x ausgeführt, mit ergebnis : 5 und 4
showmessage(inttostr(Socket.ReceiveLength)); // Wieviel kommt an?
---> Mal wird sie aber nur 1x ausgeführt mit ergebnis : 9 Kann ich irgendwie dafür sorgen, dass die Datenpakete immer einzeln ankommen? Mit freundlichen Grüßen, Draco |
Re: ReceiveBuf empfängt 2 Pakete mit einmal! Wie verhinderen
Zitat:
Am Ende hast du einfach einen logischen Datenstrom. Du musst den Datenstrom inhaltlich strukturieren, damit du am Ende noch weisst, welche Kleinpakete du am Anfang reingestopft hast. Du könntest z.B. jedes Kleinpaket mit einem Steuerzeichen (EOD) abschliesen. Oder du verwendest eine Art Tagged Format mit folgendem Aufbau:
|
Re: ReceiveBuf empfängt 2 Pakete mit einmal! Wie verhinderen
Zitat:
Danke für deine Antwort. Noch eine Frage zu TCP/IP, kann ich eigentlich sicher sein, dass alle daten in dem onreadevent da sind sobald dieses event ausgeführt wird? Mit freundlichen Grüßen, Draco |
Re: ReceiveBuf empfängt 2 Pakete mit einmal! Wie verhinderen
Zitat:
Daten in einem FIFO-Buffer zwischen gespeichert. Hierzu etwas Code:
Delphi-Quellcode:
var
FIFOdaten : string; // globale Variable ...OnRead(); var bytes : integer; begin FIFOdaten := FIFOdaten + socket.ReceiveData; while Datenkomplett(FIFOdaten) do begin bytes := VerarbeiteDaten(FIFOdaten); // verarbeite 1 Paket Delete(FIFOdaten, 1, bytes); // lösche die verarbeiteten Daten end; end; Zitat:
Bei längeren Daten könnten die Empfangsdaten unvollständig sein. Deshalb wie oben im Beispiel gezeigt arbeiten. |
Re: ReceiveBuf empfängt 2 Pakete mit einmal! Wie verhinderen
:-D
Ich habs mit nem stream gelöst, da wird immer hinten angehangen, und der position zeiger weiter gesetzt, weil ich nicht genau wußte ob der datentyp string auch mit #13 #10 usw. zurrecht kommt, und weil ich nicht genau wußte welche begrenzung (länge) der hat. Mfg, Draco |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:56 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