AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Sehr langen String mit Clientsocket an Serversocket senden..
Thema durchsuchen
Ansicht
Themen-Optionen

Sehr langen String mit Clientsocket an Serversocket senden..

Ein Thema von Evian · begonnen am 27. Feb 2004 · letzter Beitrag vom 4. Mär 2004
 
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#18

Re: Sehr langen String mit Clientsocket an Serversocket send

  Alt 29. Feb 2004, 07:31
Zitat von AnTiPrimaTe:
bei blocked sockets kann es aber genauso zu Fragmentierung kommen,
wenn die Daten groß sind, dann werden die je von TCP-Stack
gesplittet, Netz dazwischen spielt auch ne Rolle.
man muss auf jeden Fall selbst eigene Frames "verpacken",
wie ich bereits oben geschrieben hab, mit Start- und End-Signaturen
.
Definitiv Nein -> keine Start- und End-Signaturen.

Wenn der Client connected (Dann sendet der Client auch sofort) wird im OnGetThread von TServerSocket ein neuer TServerClientThread erzeugt. Dadurch wird dann im neuen TServerClientThread (oder aus dem Threadpool) die Methode ClientExecute aufgerufen. Das folgende Beispiel basiert übrigends auf
dem Beispiel aus der OH.
Delphi-Quellcode:
procedure TClientThread.ClientExecute;
var
  szBuffer : array[0..1024] of Char;
  aWSStream : TWinSocketStream;
  iBytes : Integer;
  aMStream : TMemoryStream;
  DataPosition : Integer;
begin
  FillChar(szBuffer, SizeOf(szBuffer), #0);
  while not Terminated and ClientSocket.Connected do
  begin
    try
      // Blockierende Sockets mit 60 Sekunden Timeout
      aWSStream := TWinSocketStream.Create(ClientSocket, 60000);
      aMStream := TMemoryStream.Create;
      try
        // Client muss innerhalb von 5 Sekunden mit der Übertragung beginnen
        if aWSStream.WaitForData(5000) then
          repeat
            iBytes := aWSStream.Read(szBuffer, SizeOf(szBuffer));
            if iBytes = 0 then // Wenn keine Daten mehr aus der Verbindung gelesen werden können,
                               // kappe die Verbindung zum Cient. Dadurch liefert auch WaitForData
                               // False und die Repeat-Schleife wird verlassen.
              ClientSocket.Close
            else
              aMStream.WriteBuffer(szBuffer, iBytes);
          until not aWSStream.WaitForData(2000); // Solange aus Verbindung lesen, wie
                                                 // wie Verbindung bereit ist.
        // Ab hier sind alle Daten, die gesendet wurden in aMStream !!!!!
        FStream.Clear;
        aMStream.Seek(0,soFromBeginning);
        // Der Client hat vor den eigentlichen Nutzdaten einen einen Record in den TWinSocketStream
        // geschrieben. Dieser Record enthält eine sog. CommandID. Dieser Record muss jetzt erstmal
        // aus aMStream gelesen werden.
        DataPosition:=aMStream.Read(FCommand,SizeOf(TClSvCommand));
        
        // Kopiere jetzt ab Dataposition die Nutzdaten nach FStream
        FStream.CopyFrom(aMStream,aMstream.Size-DataPosition);

       // Entscheide über die CommandID was zu tun ist.
        Case FCommand.CommandID of
          iCommandLoadMemo : Synchronize(UpdateMemo);
          iCommandCLearMemo : Synchronize(ClearMemo);
          end;
      finally
        aWSStream.Free;
        ClientSocket.Close;
        aMStream.Free;
      end;
    except
      HandleException;
      end;
  end;

end;
I come from outer space to save the human race
  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 00:16 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