Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi TServerSocket Connections[x] (https://www.delphipraxis.net/25911-tserversocket-connections%5Bx%5D.html)

Random 14. Jul 2004 19:51


TServerSocket Connections[x]
 
Hallo, ich habe eine Frage zum TServerSocket.

Um an eine Verbindung von TServerSocket Text zu verschicken, nehme ich an, dass man diesen Befehl verwendet:
Delphi-Quellcode:
Socket.Socket.Connections[x].SendText(text);
Nun ist mein Problem:
wie finde ich raus welches "x" die jeweilige Verbindung hat? Es war mir möglich mit dem von OnClientRead übergebenen "Socket" durch "Socket.SocketHandle" ein Integer-Handle einzulesen, mit welchem ich die Verbindungen zuordnen kann.
Wie kann ich nun beim Versenden das Handle dem entsprechenden "x" zuordnen?

Muetze1 15. Jul 2004 18:54

Re: TServerSocket Connections[x]
 
Moin!

Connections[] liefert dir eine Instanz vom Typ TCustomWinSocket zurück und das entspricht deinem Socket beim OnClientRead. Somit hast du 2 Möglichkeiten:

1. Im OnClientRead einfach Socket.SendText(); aufrufen und somit gar nicht erst den Socket suchen, da er dir übergeben wird.
2. Eine Schleife über alle Connections[] machen und vergleichen ob Connections[] = Socket ist...

Ich empfehle mal so pauschal die 1. Methode...

MfG
Muetze1

Random 15. Jul 2004 20:31

Re: TServerSocket Connections[x]
 
Nun gut, dies würde vorraussetzen, dass der Server dem Client sofort antwortet. Es geht mir aber vorwiegend darum, die Clients zuordnen und später, vom Server selbstständig ansprechen zu können.

Beispiel: Der Server merkt sich wann sich ein Client angemeldet hat und schreibt ihm nach einer Stunde "du bist jetzt seit einer Stunde angemeldet."

supermuckl 15. Jul 2004 21:25

Re: TServerSocket Connections[x]
 
jo dann tu das handle vom clientsocket zusätzlich in ein record oder klasse und dann kannste damit andere daten verknüpfen..

Random 16. Jul 2004 01:07

Re: TServerSocket Connections[x]
 
Oh, das geht? Gut, danke!

Muetze1 16. Jul 2004 01:31

Re: TServerSocket Connections[x]
 
Moin!

Auf meiner HP liegt ein kleiner Chat rum auf Basis von TClientSocket/TServerSocket. Dort habe ich eine kleine Klasse angelegt pro Benutzer die sich dann den Socket aufnimmt (also die Instanzen Adresse) und darüber kann ich dann leicht die Benutzer zuordnen etc . Die Benutzer-Klasseninstanzen werden in einer eigenen TObjectList Ableitung gehalten die dann auch z.B. Funktionen bietet an alle Nutzer zu senden (alle enthaltenen Instanzen durchlaufen und den Socket haben dann ja die einzelnen Instanzen). Eintragen der Instanz bei OnClientConnect und austragen bei OnClientDisconnect. Klappt wunderbar. Ansonsten einfach mal auf eine HP gehen (Delphi->Projekte) und mal anschauen...

MfG
Muetze1

Random 16. Jul 2004 02:58

Re: TServerSocket Connections[x]
 
Zur Komplettierung dieses Topics möchte ich hier noch den Tip eines Bekannten erwähnen -

man lasse einfach einen Zähler mitlaufen, der bei jedem OnConnect um eins steigt. Der Wert des Zählers wird dann mit den Userdaten gespeichert und entspricht später dem "x" in Connections[x].


Gibts eigentlich irgendwo eine Komplettlösung zu meinem Quest? :gruebel: (nicht antworten, das ist rhetorisch gemeint! :mrgreen:)

supermuckl 16. Jul 2004 10:08

Re: TServerSocket Connections[x]
 
es gibt in den indy demos ein tcp client/server demo das die user verwaltung komplett beinhaltet

mit einem record :>

is zwar kein gesockse.. aber falls indy benutzen willst oder ein scheibchen davon verwenden willst isses cool

Muetze1 16. Jul 2004 16:37

Re: TServerSocket Connections[x]
 
Moin!

@Random: Der Zähler hilft dir nix mehr, wenn bei 5 Clients der 2. getrennt wird - dann stimmen die Indizies nicht mehr. Schau dir sonst wirklich mal meinen Chat an als Ideenbeispiel. Alle Quellen auf meiner HP sind ja frei verwendbar als kannst du dir da auch die Ideen her klauen...

MfG
Muetze1

Random 17. Jul 2004 02:18

Re: TServerSocket Connections[x]
 
Man wird's nicht glauben, aber es funktioniert mit dem Counter, da beim Connections[] Dings die Socketpointer/whatever bei Disconnect durch nil ersetzt werden und damit die Reihenfolge erhalten bleibt.

Nichts gegen deine Idee (welche wesentlich eleganter ist) aber diese Methode hier ist relativ simpel und funktioniert bei mir auch schon.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:07 Uhr.
Seite 1 von 2  1 2      

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