AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TClientSocket Buffer probleme

Ein Thema von day · begonnen am 26. Jul 2007 · letzter Beitrag vom 27. Jul 2007
Antwort Antwort
day

Registriert seit: 10. Mai 2004
223 Beiträge
 
#1

TClientSocket Buffer probleme

  Alt 26. Jul 2007, 15:35
Hallo,
Ich benutze eine TClientSocket componente um eine Socketverbindung herzustellen. Jetzt habe ich Probleme bei längeren Strings und zwar empfängt er nicht alles. Geschickt wird der komplette string aber beim empfangen schneidet er einen Teil ab. Woran kann das liegen? kann man die Buffer grösse irgenwie einstellen?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#2

Re: TClientSocket Buffer probleme

  Alt 26. Jul 2007, 16:10
Was heißt "längere Strings"? Ich glaube, ich kann mich an eine maximale Paketgröße von ~4kB erinnern (kann aber auch ein anderer Wert gewesen sein). Also müsstest Du den Buffer zur Not fragmentieren.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#3

Re: TClientSocket Buffer probleme

  Alt 26. Jul 2007, 18:22
Er empfängt bestimmt alles, nur du beachtest nicht, dass du mehrfach im OnClientRead aufgerufen wirst, bis alles empfangen wurde. Bedenke dass die Sockets reine Rohdaten übertragen und kein Protokoll o.ä haben und auch nicht die gesendeten Blöcke genauso wieder ausspucken sondern eher noch mehr teilen oder kombinieren..
  Mit Zitat antworten Zitat
day

Registriert seit: 10. Mai 2004
223 Beiträge
 
#4

Re: TClientSocket Buffer probleme

  Alt 27. Jul 2007, 07:57
hallo, Geanu das ist das Problem er liest nur 4KB. Wie erkenne ich denn, dass ein String aus mehreren blöcken besteht?
  Mit Zitat antworten Zitat
DelphiKlaus

Registriert seit: 18. Okt 2006
100 Beiträge
 
Delphi 6 Professional
 
#5

Re: TClientSocket Buffer probleme

  Alt 27. Jul 2007, 08:04
Hey,

ich habe immer gute Erfahrungen damit gemacht, vor jede Nachricht, die über eine Socket-Verbindung geschickt wird, die Länge zu setzen. Damit kann man dann gut überprüfen, ob die Nachricht schon komplett empfangen wurde. Zu beachten ist dabei, daß die Stückelung einer Nachricht ziemlich willkürlich sein kann, d.h. wenn z.B. ein Vier-Byte-Wert als Länge geschickt wird, muß als erstes überprüft werden, ob die vier Bytes schon eingetroffen sind. Erst wenn die da sind, kennt man die tatsächliche Länge.

Viele Grüße

Klaus
  Mit Zitat antworten Zitat
day

Registriert seit: 10. Mai 2004
223 Beiträge
 
#6

Re: TClientSocket Buffer probleme

  Alt 27. Jul 2007, 08:11
Hallo, Aber eigentlich würde ich erwarten, dass die komponete dies übernimmt.
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#7

Re: TClientSocket Buffer probleme

  Alt 27. Jul 2007, 08:18
Nein, wie ich oben schon geschrieben habe: Die Komponente überträgt einfach nur Daten, also einfach nur eine Reihe von Bytes die du ihr gibst. Diese kommen auch in der gleichen Reihenfolge beim Empfänger wieder raus, aber nicht in den gleichen Blöcken.

Wenn die Komponente dies übernehmen würde, dann bräuchte sie ein Protokoll. Damit würde sie nur noch mit seines gleichen sich unterhalten können und du könntest den Socket niemals für die Bedienung anderer Protokolle benutzen. Ich bin heilfroh, dass dort keine "Intelligenz" in Form eines vorgeschriebenen Protokolls enthalten ist.
  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 21:47 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