![]() |
tserversocket user unterscheiden
hallo folgender code
Delphi-Quellcode:
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?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; |
Re: tserversocket user unterscheiden
hi G G,
du kannst die verbindungen doch ganz easy über ihre IP-adressen auseinanderhalten ;) aenogym |
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? |
Re: tserversocket user unterscheiden
Zitat:
aenogym |
Re: tserversocket user unterscheiden
ah nicht schlecht, willst du die vll mal herzeigen? :wink:
|
Re: tserversocket user unterscheiden
Zitat:
aber weil ich gute laune hab:
Delphi-Quellcode:
(das hab ich aus dem kopf geschrieben. falls da ein fehler drin ist, wirst du den aber sicher selber beheben können ;) )
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; aenogym |
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... |
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:
Das ist getestet und funktioniert. Das sendet eine Antwort an den neuen client.
procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;
Socket: TCustomWinSocket); begin socket.SendText('welcome'); end; der flossinger |
Re: tserversocket user unterscheiden
Zitat:
|
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:
- ist auch getestet und funktioniert.
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') ; der flossinger |
Re: tserversocket user unterscheiden
*heul* Ich fühl mich so ignoriert...
Schonmal meinen Beitrag zuvor gelesen den ich geschrieben hatte?
Delphi-Quellcode:
Wie ich vorhin schon geschrieben hatte, ist die mit "Socket" übergebene Instanz im OnClientConnect schon zu dem Zeitpunkt in dem Connections[] Array aufgeführt. Da es nur eine Instanz gibt pro Verbindung, ist sie natürlich dort wiederzufinden.
For i := 0 To Pred(ServerSocket1.Socket.ActiveConnections) Do
If ( ServerSocket1.Socket.Connections[i] = Socket ) Then Socket.SendText('welcome') Else ServerSocket1.Socket.Connections[i].SendText('one more here'); |
Re: tserversocket user unterscheiden
ok, kannst schon wieder aufhören zu heulen.
Im Ernst, deine Lösung ist viel eleganter. der Flossinger |
Re: tserversocket user unterscheiden
Hallo,
ich habe bei der Sache die hier angesprochen wurde ein kleines Problem und wollte nicht direkt einen neuen Thread aufmachen. Bei mir gibts den Befehl Socket bei der TCPServer1 Komponente irgendwie nicht somit auch nicht activeconnections. In der Delphi Hilfe wirds beschrieben, ich kanns aber net benutzen. wenn ich "serversocket." eingebe kommen ja normal die ganzen befehle da ist "socket" geschweige denn "socket.activeconnections" nit dabei auch mit "serversocker.components[i]" komm ich da nicht weiter wenn ich nur n disconnect machen möchte oder an alle eine msg. Hab ich da eine andre Komponente und muss andere befehle benutzen? Wenn ja welche? Habe Delphi2005 Architect benutzt Vielen Dank für eure Hilfe creutz |
Re: tserversocket user unterscheiden
Das gibt es bei dir aus dem einfachen Grund nicht, da wir hier vom TServerSocket und TClientSocket, den es in den alten Delphi Versionen gab und ab Delphi 7 nicht mehr standardmässig von Borland installiert waren (aber noch mitgeliefert wurden). Ob sie bei der Delphi 2005 Architekt noch mit bei liegen, kann ich dir aus Ermangeln einer entsprechenden Delphi Version nicht sagen.
Grundlegend hat der TCPServer wie auch der TCPClient nix mit den hier beschriebenen Komponenten zu tun und somit kannst du die hier angesprochenen Dinge nicht auf diese anwenden. In deiner Delphi Version empfiehlt sich eher die Nutzung der Indy Komponenten anstatt die alten TServerSocket/TClientSocket irgendwie in Delphi reinzuprügeln. In der Suche findest du genug Beispiele - im Forum und CodeLib. |
Re: tserversocket user unterscheiden
Problem hat sich gelöst.
Die komponenten liegen bei müssen aber erst noch ausm BIN verz. importiert werden. Die momentanen standart kompo sind andere trotzdem danke grüße creutz |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:40 Uhr. |
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