Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Chat: Server sendet Nachricht an EINEN Client (https://www.delphipraxis.net/177968-chat-server-sendet-nachricht-einen-client.html)

ramboni 8. Dez 2013 19:00

Chat: Server sendet Nachricht an EINEN Client
 
Hey zusammen,

um es vorweg zu nehmen: Ich bin ü50 und habe mit dem Programmieren angefangen
um meine Birne nicht ausglühen zu lassen, rechnet also nicht mit professionellen Fragestellungen :)

Ich habe einen Chat geschrieben. Ein Server und X Clients... Funktioniert super.
Ein Client sendet einen Text an den Server, dieser verteilt die Nachricht dann an alle
anderen Clients.... Nun möcht ich den Chat ein wenig ausbauen und einige Funktionen
einbauen.
Gelöst habe ich es mit der ganz normalen in Delphi integrierten Funktion: TClientsSocket,
Indy war mit zu kompliziert :)


1.
Der Server soll eine Nachricht an einen Client (nicht alle!) senden können.
Vom denken her wollte ich gerade versuchen ein Array mit ip und GetHashCode zu füllen
um dann über Server.Socket.Connections[i] suchen wer den Hash hat... aber irgendwie glaube
ich das es viel viel einfacher geht :) Darum die Frage hier :)

Weiß einer wie der Server eine Nachricht an nur einen Client senden kann?

2. Dateien verschicken.
Wie mach ich sowas?
Und wenn ich weiß wie, schick ich die Datei erst zum Server und der schickt sie dann zum Client
oder wie oder wo? :)


Ich bin zu alt für sowas..... :)


//Edit

Hat sich erledingt.
Wenn ich eine "Userliste" als Listbox anlege und diese bei Connection mittels:

Listbox1.AddItem(Socket.RemoteAddress,Socket);

befülle > dann gehts...

Was bedeutet das ", Socket"
Also das ich da jetzt die IP drin zu stehen hab, seh ich ja, aber ", Socket" ... sind das Infos
zum Client?


Mit:

(Listbox1.Items.Objects[i] as TCustomWinSocket).SendText('Test');

kann ich dann auch an genau diese Connection senden... aber was das genau bedeutet hab ich
nich nicht herrausbekommen :(
Kann mir das jemand in einfachen Worten erklären?

jensw_2000 9. Dez 2013 07:28

AW: Chat: Server sendet Nachricht an EINEN Client
 
Jeder Listeneintrag hat einen "Titel" (den du in der Listbox siehst) und einen Pointer auf ein optionales Objekt.
Wenn Du den Listeneintrag so erzeugst
Delphi-Quellcode:
Listbox1.AddItem(Socket.RemoteAddress,Socket);
, dann ist der Titel des Eintrags die IP Adresse des verbundenen Clients und das "optionale Objekt" die Socket Connection zwischen Server und diesem einen Client (vergleichbar mit einer eindeutigen "TCP Session").

Da der "Data" Pointer des Listboxeintrags auf jedes beliebige Objekt zeigen kann, musst Du es mit dem richtigen Typen ansprechen (casten).
Das bedeutet dieser Codeteil:
Delphi-Quellcode:
(Listbox1.Items.Objects[i] as TCustomWinSocket)
oder alternativ
Delphi-Quellcode:
TCustomWinSocket(Listbox1.Items.Objects[i])

Mit diesem Befehl sendest Du den Text "Test" über die eindeutige Socket Verbindung "i" an den ausgewählten Client "y".
Delphi-Quellcode:
(Listbox1.Items.Objects[i] as TCustomWinSocket).SendText('Test');


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:24 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