Einzelnen Beitrag anzeigen

Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#6
  Alt 19. Nov 2002, 09:30
phsteckel,

anbei das Demo Projekt. Es ist ein Client und ein Server - wie auch zu erwarten. Basierend auf den aktuellen INDY Komponenten habe ich im lokalen LAN einen Durchsatz von knapp 10 MB/sek erreicht, bei nur minimaler Auslastung der einzelnen Rechner.

Das ist kein fertig ausgearbeitetes Protokoll, sondern diente lediglich als Vorlage. Die einzelnen Schritte
  • Connection aufbauen
  • Client -> Server HELO name
  • Server -> Client +OK HELO (RandomID) - Die Random ID kann zum Verschlüsseln von Passwörtern genutzt werden
  • Client -> Server SIGN clientID
  • Server -> Client +OK
  • Client -> Server PASS passcode
  • Server -> Client +OK oder -ERR
  • Client -> Server PACK SourcePath;SourceFileName;FileSize
  • Client -> Server Daten der Datei
  • Server :: Speichern und Verbindungsabbruch

Threading ist heir nicht eingebaut, aber sehr leicht zu erreichen. Einfach für den Client eine separate Klasse erstellen. Bei Verbindungsaufbau eine Instanz der Klasse erstellen und diese dem Parameter AThread.Data zuweisen. Bei Verbindungsabruch diese Instanz wieder zerstören Mit jedem Command kann mann dann über TKlassenName(ASender.Thread.Data) wieder auf den Clientthread zugreifen. Zusätzlich die TIdThreadMgrDefault in das Projekt aufnehmen und mit dem TCPServer verbinden.

Im Beispiel verweise ich auf die Unit uRoutines, welche Du nicht hast. In dieser ist lediglich die folgende Routine interessant.

Delphi-Quellcode:
function FetchA(
  var aSource: AnsiString; aDelimiter: AnsiChar = ';'; aDelete: Boolean = True
): AnsiString;
var
  I: Integer;
begin
  // find delimiter in element list
  I := Pos(aDelimiter, aSource);
  if I > 0 then
  begin
    // return next element
    Result := Copy(aSource, 1, I - 1);
    if aDelete then
      // remove returned element from list
      Delete(aSource, 1, I);
  end else begin
    // element is last in element list, return
    Result := aSource;
    if aDelete then
      // clear element list
      aSource := '';
  end;
end;
Angehängte Dateien
Dateityp: zip 53_1037698213.zip (6,2 KB, 136x aufgerufen)
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat