AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi TServerThread.ClientExecute; Buffer Problem
Thema durchsuchen
Ansicht
Themen-Optionen

TServerThread.ClientExecute; Buffer Problem

Ein Thema von Gimp · begonnen am 4. Okt 2011 · letzter Beitrag vom 5. Okt 2011
 
Gimp

Registriert seit: 27. Dez 2007
7 Beiträge
 
Delphi 2006 Personal
 
#1

TServerThread.ClientExecute; Buffer Problem

  Alt 4. Okt 2011, 22:15
Hallo zusammen!

Ich beschäftige mich momentan mit den Komponenten TServerSocket und TClientSocket. Damit alle Daten alle zuverlässig ankommen, erstellt der Server für jeden Client Socket einen neuen Thread. Im Internet habe ich dazu eine nette Lösung gefunden:
Delphi-Quellcode:
procedure TServerThread.ClientExecute;
var
  ac, readlen : integer;
  fRequest: Array[0..1023] of Byte;
begin
  inherited FreeOnTerminate := TRUE;
  try
    fSocketStream := TWinSocketStream.Create(ClientSocket, 100000);
    // 100000 is the timeout in miliseconds.
    try
      while ( not Terminated ) and ( ClientSocket.Connected ) do
      try
        if fSocketStream.WaitForData(10000) then
        begin
          FillChar(fRequest, 1024, 0);
          ac := 0;
          repeat
            readlen := fSocketStream.Read(fRequest[ac], 1024);
            inc(ac, readlen);
            ShowMessage(IntToStr(readlen));
          until (readlen = 0) or (ac = 1024);
        end;
      except
        on e:exception do
        begin
          // An error has occurred, close and exit
          ClientSocket.Close;
          Terminate;
        end;
      end;
    finally
      fSocketStream.Free;
    end;
  except
    on e:exception do
    begin
      // An error has occurred, close and exit
      ClientSocket.Close;
      Terminate;
    end;
  end;
end;
Der Code an sich funktioniert soweit ganz gut. Wenn ich das erste Datenpaket von 2 Bytes sende, erhalte ich mittels meiner ShowMessage auch eine Datengröße von 2. Sende ich während die Meldung geöffnet ist weitere Daten, z.B. 10x 2 Byte große Datenpakete, wird in der nächsten Meldung 20 angezeigt. Die Pakete werden also alle in einen Buffer gequetscht, statt die Funktion 10x aufzurufen. Gibt es da einen komfortablen Weg um die Pakete wieder zu splitten? Die Größe der Daten ist nicht immer gleich, die Daten in 2 Byte große Häppchen zu zerschneiden ist also keine Lösung.

Liebe Grüße

Geändert von Gimp ( 4. Okt 2011 um 23:48 Uhr)
  Mit Zitat antworten Zitat
 


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:24 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