AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Welche funktion übernimmt ein Buffer?
Thema durchsuchen
Ansicht
Themen-Optionen

Welche funktion übernimmt ein Buffer?

Ein Thema von Dragon27 · begonnen am 30. Aug 2005 · letzter Beitrag vom 3. Nov 2005
Antwort Antwort
Dragon27

Registriert seit: 20. Nov 2003
Ort: Aßling
543 Beiträge
 
Delphi XE6 Enterprise
 
#1

Welche funktion übernimmt ein Buffer?

  Alt 30. Aug 2005, 12:58
Hallo,

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

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!
Delphi is ......... DELPHI!!
  Mit Zitat antworten Zitat
SebE

Registriert seit: 31. Jul 2004
Ort: Chemnitz
316 Beiträge
 
Delphi 7 Personal
 
#2

Re: Welche funktion übernimmt ein Buffer?

  Alt 30. Aug 2005, 13:40
in der Variable Buf, steht das drin, was du empfangen hast.

Du kannst den Bufer auch als String, Integer, ... auslesen.
Sebastian
  Mit Zitat antworten Zitat
Dragon27

Registriert seit: 20. Nov 2003
Ort: Aßling
543 Beiträge
 
Delphi XE6 Enterprise
 
#3

Re: Welche funktion übernimmt ein Buffer?

  Alt 30. Aug 2005, 14:16
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!
Delphi is ......... DELPHI!!
  Mit Zitat antworten Zitat
MarcelM

Registriert seit: 24. Aug 2005
Ort: Paderborn
5 Beiträge
 
#4

Re: Welche funktion übernimmt ein Buffer?

  Alt 30. Aug 2005, 14:31
Hi Dragon27

du kannst mit SendBuf Records, etc. senden..
  Mit Zitat antworten Zitat
Benutzerbild von JasonDX
JasonDX
(CodeLib-Manager)

Registriert seit: 5. Aug 2004
Ort: München
1.062 Beiträge
 
#5

Re: Welche funktion übernimmt ein Buffer?

  Alt 30. Aug 2005, 14:31
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.
Mike
Passion is no replacement for reason
  Mit Zitat antworten Zitat
SebE

Registriert seit: 31. Jul 2004
Ort: Chemnitz
316 Beiträge
 
Delphi 7 Personal
 
#6

Re: Welche funktion übernimmt ein Buffer?

  Alt 30. Aug 2005, 17:39
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));
Sebastian
  Mit Zitat antworten Zitat
BenjaminH

Registriert seit: 14. Okt 2004
Ort: Freiburg im Breisgau
713 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Welche funktion übernimmt ein Buffer?

  Alt 3. Nov 2005, 18:55
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..
Benjamin
  Mit Zitat antworten Zitat
Benutzerbild von Net7
Net7

Registriert seit: 22. Jun 2004
Ort: Lauenburg
161 Beiträge
 
Delphi 7 Professional
 
#8

Re: Welche funktion übernimmt ein Buffer?

  Alt 3. Nov 2005, 21:56
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.


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

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.
Marko
So`ne Atombombe kann einem den ganzen Tag verderben!
Eine eigene DLL in C++ geschrieben wird meist ein Sklave für mein Delphi/Pascal.
  Mit Zitat antworten Zitat
BenjaminH

Registriert seit: 14. Okt 2004
Ort: Freiburg im Breisgau
713 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Welche funktion übernimmt ein Buffer?

  Alt 3. Nov 2005, 22:49
Zitat von Net7:
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.
Aber es funktioniert genau so, wie ich es wollte, ich beziehe mich bei dem ganzen auf diesen Beitrag.
Benjamin
  Mit Zitat antworten Zitat
Benutzerbild von Net7
Net7

Registriert seit: 22. Jun 2004
Ort: Lauenburg
161 Beiträge
 
Delphi 7 Professional
 
#10

Re: Welche funktion übernimmt ein Buffer?

  Alt 3. Nov 2005, 23:12
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.
Marko
So`ne Atombombe kann einem den ganzen Tag verderben!
Eine eigene DLL in C++ geschrieben wird meist ein Sklave für mein Delphi/Pascal.
  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 04:22 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