AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Hilfe bei der Verwendung von TClientSocket und TServerSocket
Thema durchsuchen
Ansicht
Themen-Optionen

Hilfe bei der Verwendung von TClientSocket und TServerSocket

Ein Thema von Preddy2005 · begonnen am 9. Apr 2006 · letzter Beitrag vom 10. Apr 2006
Antwort Antwort
Preddy2005

Registriert seit: 27. Nov 2005
Ort: Mettmann
38 Beiträge
 
#1

Hilfe bei der Verwendung von TClientSocket und TServerSocket

  Alt 9. Apr 2006, 21:33
Hallo erstmal!

Ich bräuchte mal ein wenig Hilfe mit den obigen Komponenten....

Ich habe drei Formulare ... Auf 2 Forms sind die ClientSockets und auf einem der Serversocket...

Ich habe bei dem einen Formular die Einstellungen in der Ide vorgenommen und kann auch an den Server Daten schicken...

Dieser kann auch zurücksenden...

Nur wie kann ich dem Server jetzt klarmachen, dass dieser die Daten nicht mehr aus dem Loginform entgegennimmt, sondern von dem
Clientsocket aus meinem Hauptformular..?

Zur Not kann ich auch Code posten...

Im internet habe ich nix gefunden.... Leider arbeite ich in der Schule noch mit Delphi 5 und würde lieber auch die Indy
Komponenten benutzen...

Vielleicht hat ja jemand Beispielcode. Wäre sehr dankbar über Hilfe.

Gruss Matthias
  Mit Zitat antworten Zitat
Preddy2005

Registriert seit: 27. Nov 2005
Ort: Mettmann
38 Beiträge
 
#2

Re: Hilfe bei der Verwendung von TClientSocket und TServerSo

  Alt 10. Apr 2006, 22:00
Ok ich habe das jetzt alles halbwegs verstanden... Aber ich habe ein anderes Problem. Vielleicht kann mir damit jemand helfen... Es kommt irgendwie beim Senden des Memorystreams nichts an. Vorher hat es immerhin funktioniert. Nur jetzt nicht mehr.Wieso?
Vielleicht ist die Methode ja auch einfach nur falsch wie ich sende...

Hier mal der Code :

Delphi-Quellcode:

procedure TfrmClient.ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);

var
 Antwort : String; // Antwort vom Server
 Aktion : String; // Clientaktion
 Laenge : Integer; // Laenge des Streams
 Buffer : PChar; // Buffer für den Stream
 BenutzerListeStream : TMemoryStream; // Der empfangene Datenstrom

begin

 Antwort := Socket.ReceiveText; // Antwort vom Server
 Aktion := Copy(Antwort,1,4); // Das AUTH kopieren

   if (Aktion = 'AUTH') then // Erfolgreich authentifiziert
    begin
     frmLog.memLog.Lines.Add('User + Passwort korrekt'); // Memoeintrag hinzufügen
     BenutzerListeStream := TMemoryStream.Create; // Memorystream erzeugen
     Laenge := Socket.ReceiveLength; // Laenge des Streams
     GetMem(Buffer, Laenge); // Speicher adressieren
     try
      Socket.ReceiveBuf(Buffer^, Laenge); // Den Stream im Buffer speichern
      BenutzerListeStream.Position := 0; // Position des Streams auf 0 setzen
      // Daten des Streams in den Buffer schreiben
      BenutzerListeStream.WriteBuffer(Buffer^,Laenge);
      // Die Daten des Streams in eine Datei schreiben
      BenutzerListeStream.SaveToFile(ExtractFilePath(Application.Exename) + '\User' + '\Benutzerliste.txt');
      frmLog.memLog.Lines.Add('Benutzerliste erhalten'); // Memoeintrag hinzufügen


      Benutzerliste := TStringList.Create; // Benutzerliste erzeugen
      frmLog.memLog.Lines.Add('Benutzerlistenobjekt erzeugt.');

        // Benutzerliste laden und Logfenstereintraege erstellen

      Benutzerliste.LoadFromFile(ExtractFilePath(Application.Exename) + 'User' + '\Benutzerliste.txt');
      frmLog.memLog.Lines.Add('Benutzerliste geladen.');
      frmLog.memLog.Lines.Add('');
      frmLog.memLog.Lines.Add('Inhalt : ');
      frmLog.memLog.Lines.Add('');
      frmLog.memLog.Lines.Add(Benutzerliste.Text);
      Benutzerliste.Free;

      finally
       FreeMem(Buffer); // Speicher freigeben
      end
     end;
end;
und hier der Code vom Serversocket...

Delphi-Quellcode:

procedure TForm1.sktServerClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
Var

  Anfrage : String; // Anfrage : `´%]
  AnfrageString : String; // Temporäre Variable für Socket.ReceiveText
  UserName : String; // Für den Benutzernamen
  Passwort : String; // Für das Passwort
  Trennzeichen : String; // Für das 1te Komma nach der Anfrage
  Trennzeichen2 : String; // Für das 2te Komma nach dem Namen
  Trenner : Integer; // Funktion POS (Kommastelle ermitteln)
  i : Integer; // Zählvariable
  UserListeStream : TMemoryStream; // Stream für das Senden der Userliste
  Verbundene_Benutzer : TstringList; // Liste für verbundene Benutzer

begin

   i := 0;

    // Sockettext muss zwischengespeichert werden
  AnfrageString := Socket.ReceiveText;
  memLog.Lines.Add(Socket.ReceiveText);

        // Anfrage [4 Zeichen kopieren]

  Anfrage := copy(AnfrageString,1,4);

{*******************************************************************************
                      Anfrage  =  `´%]
*******************************************************************************}


   if (Anfrage = '`´%]') then
    begin
     memLog.Lines.Add('Loginabfrage:');

            // Anfragstringformat : `´%],Name,Passwort

                  // 1te Komma kopieren
     Trennzeichen := copy(AnfrageString,5,1);

            // Zeichen `´%], löschen

     delete(AnfrageString,1,5);

           // 2te Kommastelle aus dem Reststring ermitteln

     Trenner := pos(',',AnfrageString);

              // Username bis zum Komma kopieren

     Username := copy(AnfrageString,1,Trenner-1);

                 // 2te Komma kopieren

     Trennzeichen2 := copy(AnfrageString,Trenner,1);

                  // Passwort kopieren

     Passwort := copy(AnfrageString,Trenner+1,Length(AnfrageString));

                        // Zur Kontrolle

     if Trennzeichen = ',then memLog.Lines.Add(',');
     if Trennzeichen2 = ',then memLog.Lines.Add('2ter,');
     if Anfrage = '`´%]then memLog.Lines.Add('`´%]');
     if Username = 'Matthiasthen memLog.Lines.Add(Username);
     if Passwort = '819777then memLog.Lines.Add(Passwort);

  { Ist das Anfrageformat korrekt gewesen , dann erfolgt die Passwortprüfung }

                           // Passwort prüfen

                        // Stringlisten erzeugen

     slLoginListe := TStringList.Create; // Temporäre Liste als Zwischenspeicher
     slUser := TStringList.Create; // Für User
     slPasswort := TStringList.Create; // Für Passwort

             { Inhalt aus der Datei in die Stringliste laden
                          FORMAT : Name,Passwort }


     slLoginListe.LoadFromFile(ExtractFilePath(Application.Exename) + 'Login' + '\Login.txt');

    repeat

       // Kommastelle in der temporären Stringliste finden

   Trenner := pos(',',slLoginListe.Strings[i]);

      { Bis zum Trennzeichen (,) den Namen kopieren und in die Stringliste
                        für die Benutzer hinzufügen }


   User_Liste := copy(slLoginListe.Strings[i],0,Trenner-1);
   slUser.Add(User_Liste);

        // Nach dem Trennzeichen (,) kopieren

   Leerzeichen := pos(' ', slLoginListe.Strings[i]);

         // Bis zum Ende des Strings kopieren [Passwort])

   Passwort_Liste := copy(slLoginListe.Strings[i],Trenner+1,length(slLoginListe.Strings[i]));
   slPasswort.Add(Passwort_Liste);

   i := i + 1;

   until ( i >= slLoginListe.Count); // Für die Anzahl der Einträge in der Liste

        // Prüfen, ob der Benutzer und das Passwort in der Liste existieren

   for i := 0 to slUser.Count-1 do
    begin
      if (Username = slUser.Strings[i]) then
       begin
        User_Exists := True;
        break;
       end
        else
         begin
          User_Exists := False;
         end;
    end;

   // Wenn User nicht existiert, dann dem Client 'Error' senden

      if User_Exists = False then Socket.SendText('ERROR');

            // Wenn Benutzer existiert, dann Passwort prüfen

       if ( User_Exists = True ) then
         for i := 0 to slPasswort.Count-1 do
          begin
            if (Passwort = slPasswort.Strings[i]) then
             begin
              Passwort_Korrekt := True;
              break;
             end
              else
               begin
                Passwort_Korrekt := False;
               end;
       end;

       // Wenn das Passwort korrekt war, dann

  if Passwort_Korrekt = True then
   begin
    UserListeStream := TMemoryStream.Create; // Memorystream erzeugen

           // Datei aus dem User - Verzeichnis in den Stream laden

    UserListeStream.LoadFromFile(ExtractFilePath(Application.Exename) + '\User' + '\Benutzer.txt');
    MemLog.Lines.Add(Socket.ReceiveText); // Logeintrag im Memo
    UserListeStream.Position := 0; // Position im Stream auf den Anfang setzen
    Socket.SendText('AUTH'); // Ok zurücksenden
    Socket.SendStream(UserListeStream); // Stream an den Client senden
   end
    else Socket.SendText('ERROR');
   end
Vielleicht kann mir irgendjemand ja helfen und sagen was hierbei schief geht oder was ich anders machen muss...

Danke im voraus

Matthias
  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 21:48 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