Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Welche funktion übernimmt ein Buffer? (https://www.delphipraxis.net/52518-welche-funktion-uebernimmt-ein-buffer.html)

Dragon27 30. Aug 2005 11:58


Welche funktion übernimmt ein Buffer?
 
Hallo,

arbeite gerade mit den Socket-Kompos und habe dabei diese Zeile gefunden:

Delphi-Quellcode:
ReceiveBuf(var Buffer, Size: Integer);
Meine Frage nun für was benötige ich einen Buffer und was ist das eigentlich?
Könnte mir jemand ein Beispiel nennen für was ich diesen Buffer einsetzen kann?

Danke für Eure Hilfe!

SebE 30. Aug 2005 12:40

Re: Welche funktion übernimmt ein Buffer?
 
in der Variable Buf, steht das drin, was du empfangen hast.

Du kannst den Bufer auch als String, Integer, ... auslesen.

Dragon27 30. Aug 2005 13:16

Re: Welche funktion übernimmt ein Buffer?
 
Hallo,

ehm ich verstehe nicht ganz..... Dann ist das ja das gleiche wie sendtext oder?

Denn da kann ich ja dann einen String senden den ich in einen Integer umwandle, oder?

Danke für die Hilfe!

MarcelM 30. Aug 2005 13:31

Re: Welche funktion übernimmt ein Buffer?
 
Hi Dragon27

du kannst mit SendBuf Records, etc. senden..

JasonDX 30. Aug 2005 13:31

Re: Welche funktion übernimmt ein Buffer?
 
Also: Ein Buffer hat die Aufgabe, Daten zwischenzuspeichern.
Ich kann bei den WinSocks ja verschiedene Methoden zum Senden verwenden: SendString, SendInteger, SendBuffer, ect.
Der Unterschied: Bei SendString und bei SendInteger sende ich genau einen String oder einen Integer, bei SendBuffer kann ich senden was ich will. Ich kann einen Record senden, eine Klasse, oder eine Banane, wenn ich in der Lage bin, diese zu digitalisieren... Sinn des Buffersendens ist die typenunabhängigkeit. Ich kann selbstdefinierte Typen schicken.
Intern funktioniert das dann so, dass ich meinen Sockets sage: Hier fangen meine Daten an, und soviele Daten musst du senden. Die Sockets lesen dann diese Daten aus, und senden den Inhalt - egal was drinnensteht.
Auf der empfangenden Seite muss ich aber klarerweise wissen, was ich empfange. Empfange ich einen String, einen Integer, oder einen Buffer? Im letzteren Falle muss ich dann auch noch wissen, was jetzt im Buffer drinnensteht: mein Record, meine Klasse, oder meine Banane?
AFAIK funktioniert es aber nicht, einen String zu senden, und einen Buffer auszulesen. Der wird in dem Fall wahrscheinlich leer sein.

SebE 30. Aug 2005 16:39

Re: Welche funktion übernimmt ein Buffer?
 
Die Funktionen SendString (oder SendText) und SendIrgeneinTyp rufen intern auch die SendBuf auf -> Also kann man gleich immer SendBuf nehmen.

Beispiel:

Delphi-Quellcode:
S := 'Hallo';

SendBuf(S, Length(S));

BenjaminH 3. Nov 2005 17:55

Re: Welche funktion übernimmt ein Buffer?
 
Wie kann ich erkennen, welcher Typ mit SendBuf an mich gesendet wurde?
Ich würde nämlich gerne mehrere verschiedene Sachen versenden.
Thanks

//Edit ich glaub ich habs.. ich muss es nur noch verstehen..

Net7 3. Nov 2005 20:56

Re: Welche funktion übernimmt ein Buffer?
 
Zitat:

Zitat von BenjaminH
Wie kann ich erkennen, welcher Typ mit SendBuf an mich gesendet wurde?
Ich würde nämlich gerne mehrere verschiedene Sachen versenden.
Thanks

//Edit ich glaub ich habs.. ich muss es nur noch verstehen..

Das was dort steht ist mehr falsch, als richtig. Sie haben nicht verstanden wie das funzt. Ich werd echt mal n Tutorial schreiben. :wall:


Zitat:

Zitat von Chimaira
AFAIK funktioniert es aber nicht, einen String zu senden, und einen Buffer auszulesen. Der wird in dem Fall wahrscheinlich leer sein.

Das ist richfalsch :mrgreen:

String ist mal grob gesagt, ein dynamisches Array. Man muss also die Größe angeben

blabla:String[60];

Dann erst funktioniert es.

undefiniert also:

blabla:string;

funktioniert es nicht, da gebe ich dir recht.

BenjaminH 3. Nov 2005 21:49

Re: Welche funktion übernimmt ein Buffer?
 
Zitat:

Zitat von Net7
Zitat:

Zitat von BenjaminH
Wie kann ich erkennen, welcher Typ mit SendBuf an mich gesendet wurde?
Ich würde nämlich gerne mehrere verschiedene Sachen versenden.
Thanks

//Edit ich glaub ich habs.. ich muss es nur noch verstehen..

Das was dort steht ist mehr falsch, als richtig. Sie haben nicht verstanden wie das funzt. Ich werd echt mal n Tutorial schreiben. :wall:

Aber es funktioniert genau so, wie ich es wollte, ich beziehe mich bei dem ganzen auf diesen Beitrag.

Net7 3. Nov 2005 22:12

Re: Welche funktion übernimmt ein Buffer?
 
Zitat:

Zitat von BenjaminH
Aber es funktioniert genau so, wie ich es wollte, ich beziehe mich bei dem ganzen auf diesen Beitrag.

Mag sein das diese anweisungen bei einem Clienten ausreichend sind.
Delphi-Quellcode:
//Ausschnitt.....
While Stream.Position<Stream.Size do
   begin
      //IDByte einlesen
      Stream.ReadBuffer(IDByte,SizeOf(IDByte));
      if IDByte=1 then
        Stream.ReadBuffer(MyRecord,SizeOf(MyRecord));
      if IDByte=2 then
        Stream.ReadBuffer(Int,SizeOf(Int));
      if IDByte=3 then
        Stream.ReadBuffer(Str,SizeOf(Str));
    end;
Als Empfangsroutine für den Server wäre sowas tödlich. Weil ihm nur ein Client was schicken kann. Andere Clienten stehen bei dieser, Empfangsfunktion des Servers aufm schlauch. Was passiert wohl wenn dein gegenüber 100kb ( mit upload von 5KB) schickt???. Dann steht deine Anwendung Server dank dem While, solange bis der Stream fertig ist.

Aber wenns dir reicht, wie es scheint, dann ist ja ok.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:00 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz