Einzelnen Beitrag anzeigen

Benutzerbild von BlackJack
BlackJack

Registriert seit: 2. Jul 2005
Ort: Coesfeld
246 Beiträge
 
Delphi 2005 Personal
 
#8

Re: Client/Serververbindung arbeitet kurz und friert dann ei

  Alt 19. Jul 2006, 13:22
Zitat von Muetze1:
(Tipp: Schau dir die Eigenschaft Data der TCustomWinSockets an).
hmm so wie ich das in der hilfe verstehe zeigt Data auf einen Block, der Infos zu der jeweiligen Socketverbindung speichert. allerdings steht in der Delphi-hilfe sonst nicht viel dazu, wo kann man da denn mehr erfahren?

Zitat von Muetze1:
Andere Möglichkeit die mir hier gerade dabei einfällt:

Delphi-Quellcode:
procedure OnReceive:
begin
  MemoryStream.Position := MemoryStream.Size;
  MemoryStream.Size := MemoryStream.Size + Socket.ReceiveLength;

  Socket.ReceiveBuf(MemoryStream.Memory^, Socket.ReceiveLength);
End;
solle das dann nicht so aussehen: Socket.ReceiveBuf(Pointer(Integer(MemoryStream.Memory) + OldSize)^, Socket.ReceiveLength); weil so wie ich das verstanden habe zeigt Memory auf den Anfang der Daten, aber ich will ja ans Ende anhängen.


Zitat von Muetze1:
Wie wäre es einfach nach der Kennung (die du später zum neu-synchronisieren verwenden kannst) 4 Bytes zu senden mit der Gesamtlänge? Dann könnte nämlich Server sowie Client bei unbekannten Kommandos diese überspringen - weil er zwar nicht weiss wie er sie handeln kann, aber überspringen kann er sie, da er ihre Gesamtlänge kennt.
dann müssten aber auch wieder die Methoden zum Auslesen aus dem MemoryStream bescheid wissen, welche Kommandos es gibt und welche falsch sind. Ich wollte es eigentlich so machen, dass ich ne Funktion hab, die das Kommando ausliest (vorher Kennung checken etc) und die eventuell folgenden Daten mit zurückgibt. und die aufrufende Methode bekommt dann halt das Kommando und muss selber entscheiden, ob sie was damit anfangen kann.

und kann man das so machen dass nach dem Auslesen aus dem MemoryStream alles rigoros relöscht wird, was nicht mit "lrt" beginnt? weil sonst pack ich mir den MemoryStream ja eventuell immer voller aber lese nie was draus aus.
(apropos: wie löscht man am schlauesten die ersten n bytes aus dem MemoryStream, ohne die gesamten restlichen Daten kopieren zu müssen?)
See my shadow changing, stretching up and over me.
Soften this old armor. Hoping I can clear the way
By stepping through my shadow, coming out the other side.
Step into the shadow. Forty six and two are just ahead of me.
  Mit Zitat antworten Zitat