Entwickler-Ecke
Internet / Netzwerk - TClientSocket - Warten, bis alle nachrichten angekommen sind
simlei - So 23.03.08 14:04
Titel: TClientSocket - Warten, bis alle nachrichten angekommen sind
Hallo! Ich habe ein _dringendes_ Problem: Ich arbeite an einem verschlüsselten Chat, und hatte bisher noch keine Schwierigkeiten mit dem TClientSocket und dem Datenempfang - bis jetzt, weil ich nun längere Sequenzen über die Leitung sende (ganze Listen von Signaturen). Ich habe nun das Problem, dass das Read-Ereignis aufgerufen wird, wenn erst die halbe Nachricht angekommen ist; diese wird dann geparst (sollte auch funktionieren, wenn nur die Hälfte da ist, weil es am Ende der Sequenz ein Ende-zeochen gibt). Das wirkliche problem ist jetzt aber, dass, während die erste Hälfte geparst wird, die zweite Hälfte schon reinkommt und geparst wird - aber schon eher fertig ist. Der Buffer wird nicht in der richtigen Reihenfolge beschrieben, und am Ende kommt nur Chaos raus, denn das Ende-Zeichen kommt eben irgendwann in der Mitte in den Buffer und dort wird abgebrohen.
Kann mir jemand sagen, wie ich es bewerkstelligen kann, dass das read-Ereignis hintereinander ausgeführt wird? DANKE!!
(OK wäre auch eine Lösung, bei der TClientSocket wartet, bis alles angekommen ist.. dann erst die Read-Prozedur aufruft, stelle ich mir aber schwierig vor..)
Narses - Di 25.03.08 03:06
Titel: Re: TClientSocket - Warten, bis alle nachrichten angekommen sind
Moin!
simlei hat folgendes geschrieben: |
| Kann mir jemand sagen, wie ich es bewerkstelligen kann, dass das read-Ereignis hintereinander ausgeführt wird? |
Die OnRead-Ereignisse treffen "hintereinander" ein, wobei das allerdings nix mit der
Datenmenge, die eingetroffen ist [
http://www.delphi-library.de/topic_Datenpakete+bei+den+SocketKomponenten+auseinanderhalten_56194.html], zu tun hat. ;)
Das wird erst dann "komisch", wenn du solche, prinzipiell kränkelnde, Konstrukte baust: :idea:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| procedure TForm1.ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket); begin Application.ProcessMessages; end; |
Hier wird innerhalb eines Ereignishandlers nochmal die Nachrichtenwarteschlange abgearbeitet - was zu "unvorhergesehenen" Effekten führen kann, wenn man nicht ganz genau weiß, was man da tut. :?
Schau mal hier [
http://www.delphi-forum.de/topic_TNBFPA+SocketKompos+mit+Protokollfunktionen_71223.html], vielleicht ist das ja was für dich. ;)
cu
Narses
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!