Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Tserversocket user identifizieren (https://www.delphipraxis.net/92011-tserversocket-user-identifizieren.html)

gandime 13. Mai 2007 12:20


Tserversocket user identifizieren
 
hi,
ich möchte mit der Tserversocket einzelne Verbindungen zum Server identifizieren, User zuordnen und ihnen ggf. daten schicken!
Momentan habe ich es so gemacht, dass alle einkommenden Verbindungen in eine listview aufgelistet werden. Aber wie kann ich die aufgelisteten Verbindungen einer connection zuordnen?

mfg
gandime

Apollonius 13. Mai 2007 12:25

Re: Tserversocket user identifizieren
 
Zitat:

Aber wie kann ich die aufgelisteten Verbindungen einer connection zuordnen?
:wiejetzt:
Was willst du wozu zuordnen? IP-Addressen? Selbstgegebene Namen?

gandime 13. Mai 2007 12:30

Re: Tserversocket user identifizieren
 
meine Formulieren ist eben vlt etwas Verwirrend gewesen...
Jede einkommende Verbindung wir doch einer connection zugewiesen wenn ich micht nicht irre.
Dem Clienten kann man dann so eine Nachricht schicken:
Delphi-Quellcode:
Tserversockt.socket.connection[hier dann die connection]. ...
wie kann ich diese connection herausfinden?

gsh 13. Mai 2007 12:32

Re: Tserversocket user identifizieren
 
es gibt da einen integer wert der bei jeder connection eindeutig ist
Delphi-Quellcode:
Socket.SocketHandle;
Nur so als denkanstoß ... den rest kannst du dir selber schreiben

gandime 13. Mai 2007 12:42

Re: Tserversocket user identifizieren
 
soweit war ich auch schon
Delphi-Quellcode:
procedure TForm1.ss_serverClientConnect(Sender: TObject;
  Socket: TCustomWinSocket);
var
  i_socket:integer;
begin
  i_socket:=Socket.SocketHandle;
... auflisten usw.
end;
sobald ich dann was senden möchte tritt ein fehler auf:
Delphi-Quellcode:
procedure TForm1.bt_sendClick(Sender: TObject);
var
  i,i_wo:integer;
begin
  for I := 0 to lv_bots.Items.count - 1 do
  begin
    i_wo:=strtoint(lv_bots.Items.Item[i].SubItems.strings[8]);
    if (ss_server.Socket.Connections[i_wo].Connected=true) then
    begin
      ss_server.Socket.Connections[i_wo].SendText(s_bauliste_send+'|');
    end;
  end;
end;
Fehlermeldung:
Zitat:

Erste Gelegenheit für Exception bei $7C812A5B. Exception-Klasse EListError mit Meldung 'Listenindex überschreitet das Maximum (5980)'. Prozess Project1.exe (4040)

gsh 13. Mai 2007 13:33

Re: Tserversocket user identifizieren
 
ne des ist ja auch falsch
du darst den connection id nicht als index für des connections array verwenden sondern alle connections durchgehen und schauen wo die richtige socketid ist

gandime 13. Mai 2007 14:17

Re: Tserversocket user identifizieren
 
joo danke jetzt gehts

Muetze1 13. Mai 2007 19:27

Re: Tserversocket user identifizieren
 
Wozu SocketHandle? Die Socket Instanz ist genauso eindeutig.

Apollonius 13. Mai 2007 20:16

Re: Tserversocket user identifizieren
 
Mit dem Index ist dass so eine Sache. Wenn nämlich eine Verbindung gelöst wird, verringern sich ja die Indices aller nahfolgenden Verbindungen. Bliebe wohl nur noch
1. Ständig zu prüfen, welche Nummer es denn ist (lästig)
2. Wie schon vorgeschlagen, die Socketinstanz (z.B. in einer TObjectlist)

Muetze1 13. Mai 2007 21:50

Re: Tserversocket user identifizieren
 
Wozu noch eine TObjectList? Der Serversocket hat in der Connections[] Eigenschaft eigentlich schon eine. Warum noch eine zweite die man dann noch zusätzlich pflegen muss? Dann nimm lieber die TSocket Instanz aus den Aufrufen und packe sie beim OnConnect in die TListView (TListItem.Data). Wenn der Name feststeht, dann aktualisieren den TListView Eintrag anhand der TSocket Instanz (und TListItem.Data) und bei OnDisconnect entfernst du genau den Eintrag aus dem TListView, welcher in der (TListItem.)Data Eigenschaft genau den Socket enthält, welcher dir im OnDisconnect gerade überreicht wurde.


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