Delphi-PRAXiS
Seite 3 von 4     123 4      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Server UserListe abfragen (https://www.delphipraxis.net/177595-server-userliste-abfragen.html)

mjustin 15. Nov 2013 14:46

AW: Server UserListe abfragen
 
Zitat:

Zitat von Frage95 (Beitrag 1236039)
Delphi-Quellcode:


for i := 0 to Server.Socket.ActiveConnections -1 do
  Server.Socket.Connections[i].SendText(Nachricht);
Das ist mein Server.

Das sieht nicht sehr threadsicher aus. Änderungen an ActiveConnections während des Schleifendurchlaufs können zu Access Violations oder anderen Problemen führen.

Bei Indy gibt es LockList/Un Methoden, damit man auf die Connections threadsicher zugreifen kann (http://stackoverflow.com/questions/5...y-tidtcpserver).

Gibt es so etwas auch für diese TCP Serverkomponente?

Jumpy 18. Nov 2013 08:04

AW: Server UserListe abfragen
 
Ich werf mal dieses Tutorial in den Raum:

http://www.entwickler-ecke.de/topic_...s_54269,0.html

generic 19. Nov 2013 09:21

AW: Server UserListe abfragen
 
^erst das Tutorial lesen!

Du musst dir wenn du einen Chat baust, etwas Gedanken über dein Protokoll und die Zustände der Verbindungen Gedanken machen.
Die eigentliche Verbindung/Connection ist ja nur der Transportkanal für Daten.

Vom Ablauf:
Der Client muss sich verbinden.
Der Server lässt die Verbindung zu und merkt sich (z.B. via statemachine) in welche Zustand die Verbindung ist. Das ist derzeit nicht angemeldet bzw. Gast.
Nun schickt der Client Benutzer und Passwort. Der Server prüft es bei Fehler wird der Client über die nicht erfolgreiche Anmeldung informiert. Ist es erfolgreich, dann muss der Zustand der Verbindung auf Angemeldet umgeschaltet werden und ggf. der Benutzername mit der Verbindung zusammen gespeichert werden.
Wenn das mehrere Clients machen, dann hast du deine Benutzerliste.

Wenn nun eine Chat-Nachricht kommt, dann muss diese weitergeleitet werden, wenn der Sender den angemeldeten Zustand hat. Die Weiterleitung an aller verbundenen Clients (so können Gäste mitlesen, aber nicht schreiben).

Wird eine Verbindung getrennt, dann muss der Benutzer aus der Benutzer-Verbindungsliste entfernt werden.

Persönliche Nachrichten lassen sich auch schreiben, in dem in der Nachricht ein Empfänger ist. Dann muss nur durch die Verbindungsliste gegangen werden und dann an jede (mehrere!) die dem Benutzer gehört, die Nachricht schicken.

Also wie soll dein Protokoll zur Steuerung (Anmelden, Abmelden, Persönliche Nachrichten, Nachrichten an Raum, Passwort-Ändern, Benutzer-Erstellen etc.) aussehen.
Wie soll eine Nachricht aussehen, denn diese ist ja auch nur ein Container, welcher durch den Datenkanal geschickt wird. Hat diese wie eine Email Absender/Empfänger oder wird das auf Protokoll-Ebene entschieden?
Wie überträgt man die Nachricht, dass dort enthalten Befehle nicht als Protokoll ausgewertet werden?

Frage95 20. Nov 2013 09:21

AW: Server UserListe abfragen
 
Also ehrlich gesagt bin ich ziemlich überfragt ich bin ein Neuling in Delphi oder allgemein in der Programmierung.

generic 20. Nov 2013 17:08

AW: Server UserListe abfragen
 
Das haben wir uns schon gedacht und wollten dezent drauf hinweisen, dass ein Chat nicht mal eben so programmiert ist.

Es wird dann halt immer interessant, wenn "einfache" Anforderungen wie "Benutzerliste" dazu kommen und die eigentliche Problematik dahinter nicht gesehen wird. Das geht dann auch nur mit Erfahrung.
Netzwerkzeug hat auch viel mit Sicherheit zu tun - unerfahrend besser die Finger von lassen.

Vielleicht ein einfaches "Start"-Projekt? Es gab hier mal in der DP ein Betrag mit Beispielprojekten.
Hat den mal bitte jemand zur Hand.

Wenn du es dennoch probieren willst, dann schau dir mal das POP3-Protokoll an. Das ist recht einfach und gibt dir vielleicht paar weitere Ideen.

Chat und Email sind sehr ähnlich.

ramboni 16. Mai 2014 23:55

AW: Server UserListe abfragen
 
Zitat:

Zitat von himitsu (Beitrag 1236086)
Man kann die Namen auch in den Benutzerdaten des Socket speichern.
Muß dann beim erstellen der Liste nur alles sockets auflisten und da den Namen auslesen.

Oder wenn es nur in der Userlist gespeichert wird,
dann macht es sich nicht schlecht da auch den zugehörigen Socket mit zu speichern, damit man eine Verbindung zwischen Socket und Benutzer hat.

PS:
Delphi-Quellcode:
Useranzahl := Userlist.Count;

Hi,

interessantes Thema. Ich versuche sowas auch gerade.
Wie kann ich denn den Socket mit in einer Stringlist speichern?
Wie sieht so ein gespeicherter Wert dann aus und wie kann ich danach
Suchen damit ich z.B. eine Nachricht nur an diesen User senden kann?

LG RamboNi

Sir Rufo 17. Mai 2014 00:02

AW: Server UserListe abfragen
 
Zitat:

Zitat von ramboni (Beitrag 1259114)
Wie kann ich denn den Socket mit in einer Stringlist speichern?

Sinnvoll ist es das erst gar nicht mit einer StringList speichern zu wollen.

Welche Delphi-Version setzt du denn ein (kann man aus deinem Profil ja leider nicht ersehen)?

ramboni 17. Mai 2014 01:44

AW: Server UserListe abfragen
 
Ich teste mich seit kurzem im Programmieren, habe aber leider
keine eigene Lizens also nutz ich den Rechner eines ehem. Kollegens dafür.
So genau weiß ich es aber nicht. XE irgendwas... reicht das vielleicht schon?

Wo/wie speicher ich die denn, wenn nicht in einer Stringlist?

Sir Rufo 17. Mai 2014 01:53

AW: Server UserListe abfragen
 
Im Profil trägt man nicht die Lizenz ein, sondern die Version mit der man hauptsächlich arbeitet.

Eine StringList ist primär zum Speichern/Verwalten von Text (eine Liste mit Strings).
Passt ja nicht so wirklich, wenn man Benutzer und Socket (und ...) verwalten möchte.
Geht irgendwie schon, aber man ist fast nur am hin- und herwandeln (string <-> echte Information).

Records und Klassen kennst du schon?

Wenn nicht, dann solltest du auf jeden Fall zunächst ein paar Grundlagen-Tutorials durcharbeiten.

ramboni 17. Mai 2014 02:02

AW: Server UserListe abfragen
 
Records und Klassen sagen mir etwas ja.

Allerdings bin ich jetzt noch mehr verwirrt :)
Sind Records meine "SocketSammler", bei z.B. 5 Usern?

Das Stringlistverfahren hab ich mittlerweile verstanden, da kann man einen
String und ein Socket speichern nur sieht man den Socket halt einfach nicht :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:26 Uhr.
Seite 3 von 4     123 4      

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