AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Problem mit SendBuf
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit SendBuf

Ein Thema von hugo1990 · begonnen am 18. Feb 2008 · letzter Beitrag vom 19. Feb 2008
Antwort Antwort
hugo1990

Registriert seit: 27. Dez 2006
166 Beiträge
 
Turbo Delphi für Win32
 
#1

Problem mit SendBuf

  Alt 18. Feb 2008, 21:30
Wenn man mit den Komponenten TServerSocket und TClientSocket Text über SendText versendet, kann es ja passieren, dass wenn ich den Text mit ReciveText aufrufe mehrere Texte zu einem zusammengeführt worden.
z.B.:
SendText('hallo');
SendText('wie geht''s');
ergibt : ReciveText('hallowie geht''s');

passiert diese Sache auch bei SendBuf, denn bei meinem Programm kommt es öfters mal vor, dass einige Daten verloren gehen, vorallem wenn mehrere male schnell hintereinander SendBuf aufgerufen wird. Ich habe den Verdacht, das dadurch die Daten von der vorherigen Sendung mit den neuen überschrieben werden, ohne das die alten verwendet werden konnten. Ist das der Fall? Und wenn ja, was kann man dagegen unternehmen.
Ach ja und bitte sagt jetzt nicht alle: "Verwende doch die Indykomponenten", dazu hab ich jetzt schon zu viel geschrieben, um das noch umzuändern.
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Problem mit SendBuf

  Alt 18. Feb 2008, 21:34
Das ist eben TCP: Es wird ein Stream gesendet, die Reihenfolge bleibt erhalten, aber die Einteilung in Pakete ist nicht global. Das lässt sich nicht durch andere Komponenten oder andere Methoden lösen, sondern nur durch ein Protokoll.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
hugo1990

Registriert seit: 27. Dez 2006
166 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Problem mit SendBuf

  Alt 18. Feb 2008, 21:40
Zitat von Apollonius:
Das ist eben TCP: Es wird ein Stream gesendet, die Reihenfolge bleibt erhalten, aber die Einteilung in Pakete ist nicht global. Das lässt sich nicht durch andere Komponenten oder andere Methoden lösen, sondern nur durch ein Protokoll.
Soll das jetzt heißen, das da mehrere Buffer zusammen gepackt sein können, wenn ja, wie kann man die "zerpflücken".
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#4

Re: Problem mit SendBuf

  Alt 18. Feb 2008, 22:44
Genau darum muss sich dein Protokoll kümmern. Die Socket Komponenten übertragen einfach nur die Daten. Sie sorgen für die richtige Reihenfolge der Bytes. Wie und in welcher Teilung du was absendest, ist den Komponenten vollkommen egal, sie übertragen nur Bytes. Auch SendText()/SendBuf() unterscheiden sich nur in dem Typ, wie sie die Daten annehmen. Es sind weiterhin für den Socket nur Bytes, d.h. mit SendBuf() gesendete Daten kannst du genauso mit ReceiveText() empfangen.

Du hast darum zu kümmern, dass du weisst:

a) ob du alle nötigen Daten empfangen hast, bzw. wieviele Bytes noch fehlen
b) wie die Daten organisiert sind
c) welche Daten wo und wann über den Socket verschickt werden.

Selbst wenn du einmal "Hallo" mit SendText() versendest, kannst du im schlechtesten Falle 4x im OnClientRead aufgerufen werden mit jeweils nur einem Buchstaben, bis du alles empfangen hast.

Mal anders: Die Socket Komponenten senden und empfangen Bytes, ohne irgendwelche Daten hinzu zu fügen oder zu interpretieren. Von daher kannst du damit viele Dinge implementieren, bzw. viele Protokolle. Damit kannst du ein FTP Protokoll genauso wie SMTP implementieren. Wenn der Socket deine Teile (wie du es dir wünscht) am anderen Ende wieder entsprechend Teilen soll, dann bräuchte er auch Informationen wo und wie die Teile zu teilen sind (also ein Protokoll). Somit: er müsste die übertragenen Bytes verändern (was anhängen), damit das klappt. Damit würden diese Komponenten aber sofort unbrauchbar, wenn man Protokolle implementieren will (wie z.B. die oben genannten).
  Mit Zitat antworten Zitat
hugo1990

Registriert seit: 27. Dez 2006
166 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Problem mit SendBuf

  Alt 19. Feb 2008, 16:10
ok also ich habe mich jetzt entschieden, das ganze über SendText zu realisieren, da man dort ja meiner Meinung nach die nachrichten wesentlich einfacher voneinander trennen kann, nämlich indem ich einfach ein Trennzeichen dazwischen setze.
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#6

Re: Problem mit SendBuf

  Alt 19. Feb 2008, 16:19
Zitat von hugo1990:
ok also ich habe mich jetzt entschieden, das ganze über SendText zu realisieren, da man dort ja meiner Meinung nach die nachrichten wesentlich einfacher voneinander trennen kann, ...
Du könntest an die Daten die du an SendBuf() übergibst auch einfach noch was dranhängen vor dem Aufruf...

Zitat von hugo1990:
..., nämlich indem ich einfach ein Trennzeichen dazwischen setze.
Was schon ein Protokoll darstellt.
  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 03:46 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