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 user unterscheiden (https://www.delphipraxis.net/58120-tserversocket-user-unterscheiden.html)

G G 1. Dez 2005 16:46


tserversocket user unterscheiden
 
hallo folgender code


Delphi-Quellcode:

procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
var i :integer;
begin

  For I := 0 to ServerSocket1.Socket.ActiveConnections - 1 do
   begin // Anzahl der Teilnehmer
   with ServerSocket1.Socket.Connections [I] do
  if (Connected) then SendText('hallo');
 end;
end;
nun meine frage wenn ich I ändere und z.B nur an I = 5 schicke dann kriegt die verbindung nummer 5 die nachricht. Aber nun wie kann ich z.B im onconnect event erkennen welches I dieser neuer benutzter hat?

Aenogym 1. Dez 2005 17:01

Re: tserversocket user unterscheiden
 
hi G G,

du kannst die verbindungen doch ganz easy über ihre IP-adressen auseinanderhalten ;)

aenogym

G G 1. Dez 2005 17:13

Re: tserversocket user unterscheiden
 
ahja schon dann hab ich die ip addreese aber wnen ich dann eine nachricht an einen schicken will z.B

with ServerSocket1.Socket.Connections [I] do
if (Connected) then SendText('hallo');


dann muss ich ja wissen welchs I für welche ip steht.

also wie find ich den dieses I heraus, odr knan man die ip umwandeln?

Aenogym 1. Dez 2005 17:36

Re: tserversocket user unterscheiden
 
Zitat:

Zitat von G G
also wie find ich den dieses I heraus, odr knan man die ip umwandeln?

also ich hab mir für sowas ne funktion geschrieben, die den connections-array durchläuft und prüft, ob die IP des aktuellen eintrags der gesuchten entspricht. wenn ja, wird der index zurückgegeben und die schleife verlassen.

aenogym

G G 1. Dez 2005 17:44

Re: tserversocket user unterscheiden
 
ah nicht schlecht, willst du die vll mal herzeigen? :wink:

Aenogym 1. Dez 2005 18:12

Re: tserversocket user unterscheiden
 
Zitat:

Zitat von G G
ah nicht schlecht, willst du die vll mal herzeigen? :wink:

also eine schleife dadurch zu machen ist doch nicht so schwer ;)

aber weil ich gute laune hab:

Delphi-Quellcode:
function GetConnectionID(AServerSocket: TServerSocket; AIP: string): integer;
var i: integer;
begin
  for i:=0 to AServerSocket.Connections.count-1 do
  begin
    if AServerSocket.Connections[i].RemoteAddress = AIP then
    begin
      result := i;
      break;
    end;
  end;
end;
(das hab ich aus dem kopf geschrieben. falls da ein fehler drin ist, wirst du den aber sicher selber beheben können ;) )

aenogym

Muetze1 1. Dez 2005 22:02

Re: tserversocket user unterscheiden
 
Omg - ich glaube ich sollte doch mal ein Socket Tutorial schreiben. Ich liebe ja die alten Kompos, die sind so schön einfach...

Aber egal, ihr wollt was anderes wissen: Warum bastelt ihr hier mit IPs rum? Beim OnClientRead/OnClientConnect etc wird doch ein Socket übergeben (Parameter Socket) und dieser ist natürlich auch in dem Connections[] Array wieder zu finden, also einfach vergleichen ob du gerade die gleiche Instanz bearbeitest bzw. behandelst...

flossinger 6. Dez 2005 12:47

Re: tserversocket user unterscheiden
 
Hallo,

da ist etwas übersehen worden. Du kannst in der on connect procedure direkt dem neuen Client antworten.
Es braucht weder eine Schleife noch einen Vergleich.

Im on connect wird dir der socket zum neuen client übergeben.

Code:
procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
socket.SendText('welcome');
end;
Das ist getestet und funktioniert. Das sendet eine Antwort an den neuen client.

der flossinger

Muetze1 6. Dez 2005 13:27

Re: tserversocket user unterscheiden
 
Zitat:

Zitat von flossinger
da ist etwas übersehen worden. Du kannst in der on connect procedure direkt dem neuen Client antworten.
Es braucht weder eine Schleife noch einen Vergleich.

Im on connect wird dir der socket zum neuen client übergeben.

Darauf habe ich auch schon hingewiesen, hatte es aber bisher so verstanden, dass er eine Lösung sucht allen anderen Clients bis auf den neu verbundenen etwas zu schicken (z.B. vllt. die Join Mitteilung?).

flossinger 6. Dez 2005 13:51

Re: tserversocket user unterscheiden
 
Ja könnte sein, ich habe aus seinem 'hello' voreilig auf die Begrüssung des neuen clients geschlossen. Wie dem auch sei, für den anderen Fall würde ich ihm das folgende empfehlen:
Code:
for i:=0 to serversocket1.Socket.ActiveConnections - 1 do
   if (serversocket1.socket.connections[i].RemoteAddress = socket.RemoteAddress)
   and (serversocket1.socket.connections[i].RemotePort = socket.RemotePort)
   then serversocket1.socket.connections[i].sendtext('welcome')
   else serversocket1.socket.connections[i].sendtext('one more here')
   ;
- ist auch getestet und funktioniert.

der flossinger


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

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz