Einzelnen Beitrag anzeigen

Benutzerbild von Net7
Net7

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

Re: Serversocket wie Clients Unterscheiden ?

  Alt 13. Mai 2006, 11:11
Also ich habs in etwa so gemacht.

Bischen Bastelcode: Auszug!!

Und Teile meines Projects...

Delphi-Quellcode:

const
      MaxAnzCon=100;


Type
     TAInt=array[0..MaxAnzCon] of Integer;


 Type
     TClientenverwaltung=record
     Con : TAInt; // Socketnummer
     HNr : TAInt; // dazugehörige Handlenummer
     isOnline :array [0..MaxAnzCon] of boolean; // ist er auch noch online
     end;


.....
CV:TClientenverwaltung;


// CV ( Clientverwaltung) Array mit Anfangswerten beschreiben
procedure TNet7Server.Init;
(* -------------------------------------------------------------------------- *)
var
i: Integer;
begin
      
    // Serverliste mit Wert -1 füllen
    for i := 0 to MaxAnzCon do
      begin
          cv.Con[i] := -1;
          cv.HNr[i] := -1;
          cv.isOnline[i] := false;
     end;

end;

//Clienten in Liste aufnehem bei Event ClientonConnect funktionsfähig
procedure TNet7Server.ClientOnList;
(* -------------------------------------------------------------------------- *)
var
LZaehler: Integer;
begin
       LZaehler := 0;
            //zähle solange hoch bis du einen freien Paltz (-1) in der Liste findes
            while cv.HNr[LZaehler] > -1 do
              begin
                    inc(LZaehler);
               end;


                 cv.HNr[LZaehler] := socket.Connections[socket.ActiveConnections-1].Handle;
                 cv.isOnline[LZaehler] := true;
                 cv.Con[LZaehler] := socket.ActiveConnections-1;

                
                
end;
Ich hoffe der Code hilft dir weiter, die Überwachung ob der Client Online ist bzw seine Löschung geb ich dir noch nicht... "Sebst ist der Mann" aber wenn du da irgendwie hängenbleibst geb ich dir gerne wieder Tipps

Über den Aufruf des Records also cv[x].bla hast du die Socketnummer, die Handlenummer und umgekehrt...


mfg Net7

// Edit: Einen Stolperstein möchte ich ich dir noch ersparen.

Bedenke!!!!!
Sobald ein Client offline geht rutscht die Socketnummer einen Wert tiefer und die gespeicherte Handlenummer im Record stimmt mit der Socketnummer im Record nicht mehr überein.
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