[TServerSocket] Clients ermitteln



  • Hallo,

    ich code gerade an einem kleinen Chatprogramm für unser LAN. Soweit hab ich keine Probleme. Chatten funktioniert wunderbar. Ich hänge grad an der Benutzerverwaltung. Bis eben hab ich noch die Nicks beim Client eingegeben und der hat daraus einen String zum verschicken gebastelt. Aber das gefällt mir so nicht, denn ich möchte eine Benutzerverwaltung einbauen. ich hab mir das so gedacht, das ich einen String an den Server schicke wie zB /Nick IrgendeinName. Anhand des Schlüsselworts /Nick, soll der Server den Namen IrgendeinName verwenden. Das funzt soweit ganz gut. Wenn das allerding mehrer Clients machen, dann bekommt jeder den gleichen Nick ... Nun meine Frage, wie identifiziere ich die Clients eindeutig. Ich hab was von Handle hier im Forum gelesen, aber da werde ich nicht schlau draus ... könnt ihr mir event. ein wenig auf die Sprünge helfen, bin echt ratlos 😕

    btw

    ich benutze TClientSocket und TServerSocket ...

    void __fastcall TForm1::ServerSocket1ClientRead(TObject *Sender,
          TCustomWinSocket *Socket)
    {
            AnsiString Nachricht = Socket -> ReceiveText();
    
            if(Nachricht.AnsiPos("/nick") == 1)
            {
                    NickName=Nachricht;
                    NickName.Delete(1,6);
    
                    for(int i=0; i <= ServerSocket1 -> Socket -> ActiveConnections-1; i++)
                    {
                            ServerSocket1 -> Socket -> Connections[i] -> SendText("Neuer Nick: " + NickName);
                    }
                    Memo1 -> Lines -> Add("Neuer Nick: " + NickName);
            }
            if(Nachricht.AnsiPos("/nick") == 0)
            {
                    for(int i=0; i <= ServerSocket1 -> Socket -> ActiveConnections-1; i++)
                    {
                            ServerSocket1 -> Socket -> Connections[i] -> SendText(NickName + ": " + Nachricht);
                    }
    
                    Memo1 -> Lines -> Add(NickName + ": " + Nachricht);
            }
    }
    


  • Such mal zum Thema 'socket' und 'benutzerverwaltung', da gab's schon mal einen schönen Thread.



  • hm... das hilft mir nicht weiter, ich hab die Threads schon gelesen, darum frag ich ja... Wie kann ich die einzelnen Clients eindeutig identifizieren?



  • Weise dem client vom server aus eine eindeutige identifikation zu. diese identifikation sendest du dann gerade mit jedem string mit und der Server kann aus einer liste einfach den benutzername auslesen....



  • naja, ich werd's morgen nochmal versuchen... mal sehn... ob ich es dann hinbekomme 😕 ... trotzdem thx



  • ich bekomme es einfach nicht hin 😢

    Client schickt eine Nachricht an den Server -> Server filtert den Nick aus der Nachricht -> Server speichert den Nick -> Server setzt Nick und Nachricht zusammen -> Server verschickt die Nachricht

    aber das bekomme ich nicht hin...

    kann mir denn keiner helfen?! Aus den alten Threads werd ich nicht schlau 😕

    Ich will doch kein fertiges Programm, ich will doch nur die Clients eindeutig identifizieren, anhand von Socket -> Connections[0 bis n], den Rest bekomme ich schon selbst hin...



  • Nabend!

    Zu deinem Prob:

    Wenn ein Client sich anmeldet, dann schickt er bei mir automatisch im anschluss den Nick. Also ohne einen Text zu senden. Beim Server gehts dann so:

    Im OnClientConnect ne bool Variable auf true. (Jetzt wird ja vom Client schon der Name gesendet)
    Im OnClientRead Abfragen ob die Bool-Var true ist und *voila* du kannst jetzt den Nick speichern ohne den groß zu filtern.

    Zur Identifiezierung, jeder Client (auch dein Server) haben ein eigenes SocketHandle. damit sollte es gehen 🙂



  • Hi,
    eindeutige Identifikation ist auch über die IP möglich!

    MFG

    Alexander Sulfrian



  • @Alexander Sulfrian

    jein, es soll ja auch _ein_ User mit mehreren Clients auf den Server connecten 😉

    @PuppetMaster2k

    ich werd das mal am Weekend versuchen, hab momentan absolut keine Zeit ... schonmal thx


Anmelden zum Antworten