TClient & TServerSocket Frage
-
Mal eine Frage:
Wie bekomme ich beim Verbinden eines Clients mit dem Server raus, wer sich gerade verbindet also z.B. die IP-Adresse oder eine Bezeichnung die evtl. dem Client geben kann?
-
Schau dir mal die Eigenschaft "Socket" von TServerSocket an und die zugehörigen "Untereigenschaften"...
-junix
-
ShowMessage( Server->Socket->Connections[0]->RemoteAddress );
Also so dürfte ich schon mal die IP rausbekommen...
Nur habe ich nicht eine Möglichkeit dem Client eine Bezeichnung zugeben die ich beim Verbinden abfragen kann? So in der Art wie bei den FastNet Komp.?
-
Mir ist nicht ganz klar was du meinst?
-junix
-
Sorry ich versuch es mal so:
Wenn ich mit den FastNet Komps. etwas schreibe kann ich ja immer noch die Eigenschaft FromName abrufen.
Ist also so eine Art Bezeichnung des Client(Sockets)
Nun wollte ich wissen ob das mit den TClientSockets auch möglich ist.
-
Meines Wissens nicht... aber du kannst ja selber eine schattenliste führen...
-junix
-
Schade... Ja das dachte ich mir auch schon macht natürlich den Aufwand sehr viel größer...
Aber trotzdem danke..
-
eigendlich ist der aufwand sehr gering, da du per Socket->Handle eine exacte identifikation hast.
nun schreibst du bei jedem onClientConnect event den Socket->Handle in eine StringList.
wenn du nun mit ServerSocket->Socket->Connection[getIdFromHandle(Socket->Handle)]->Send...
und der funktion
int getIdFromHandle(int s) { for(int i=0; i<HandleList->Count; i++) { if(IntToStr(s) == HandleList->Strings[i]) return i; else return -1; } }
weitermachst, dann ist das garnicht soooo aufwändig...
natürlich brauchst du auch noch ein paar funktionen, die den user erkennen, den handle speichert usw..
-
Danker erst einmal der Tip ist schon mal net schlecht...
Aber mal ne Frage kann es sein das diese Funktion
getIdFromHandle();
nicht existiert??
-
Also bevor ich jetzt anfangen da auch noch dran rum zu basteln aber Wenn ein Client Connected... kann ich dann heraus finden wo der Server die Verbindungs in seinem Array hin schiebt? ( Server->Socket->Connetions[?] )
-
a) Lies nochmals DreadlockFilberts Posting _genau_ durch.
b) was deinen zweiten Post anbetrifft: nein, du kannst das nicht rausfinden. Der Platz im Array ist auch nicht fix vergeben. Bezieh dich also bloss nicht darauf.-junix
-
wie gesagt, wenn du diese liste benutzt, dann ist der eintrag des sockets genau dem index in der liste...