Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

20.07.2003, 21:12

Socket Problem

Hi,
weis jemand, wie ich rausbekomme wieviel bytes sich noch im socket-buffer befinden, d.h. ich bekomme von nem server 60 Byte zugeschickt, möchte aber erste 20 Byte und danach die restlichen 40 Byte verarbeiten.

In PHP gibts ja die funktion

Quellcode

1
socket_get_status

die mir u.a. auch die anzahl der bytes gibt die sich noch im buffer befinden.
In a world without fences and walls - who needs windows and gates ?

http://www.Paid4Mailer.de/?refid=8422

2

22.07.2003, 10:20

Also du könntest z.B. nen sizeof() auf deinen Buffer machen, das setzt allerdings vorraus das du den buffer mit jeder gelesenen Menge verkleinerst.
Oder du machst es wie die Profis, und rechnest mit. D.h. du musst vor jedes Packet die länge der Daten schreiben. Such mal nach lengthprefixing, bei google. z.B. du bekommst ein paket, die ersten 4bytes wandelst du in einen Interger um und hast dann die länge der folgenden Daten. Liesst du nun 20byte der daten reduzierst du deinen interger, und weisst immer wieviel noch im buffer ist.

Das wird bei jedem besseren Protokoll so gmeacht und geht auch nicht wirklich anders, wenn du ein grosses Client-Server Programm baust.

Jens

Treue Seele

Beiträge: 117

Wohnort: Dresden

  • Private Nachricht senden

3

13.09.2003, 01:05

ist das eigentlich noch aktuell?

Also meine Erfahrungen mit syncronen Sockets haben gezeigt, dass Du immer einen Buffer von 4096 Byte bereithalten und so lange lesen soltest, bis der Datenstream leer ist.
Dann kannst Du in Ruhe Deine 20 Bytes auswerten ;-)

Es gibt glaube ich noch ne Funktion, die da etwa heißt IsDataAvailable oder so. aber die zeigt Dir nur, ob neue Daten vorhanden sind,
Bis später...

Werbeanzeige