Entwickler-Ecke

Internet / Netzwerk - Index von connection herausfinden


opactium - Do 29.11.07 18:38
Titel: Index von connection herausfinden
hallo zusammen

also ich habe einen clienten, und einen server. wenn jemand jetzt mit dem clienten zu mir connected, wird er beim server in ein listview eingetragen.
ich will jetzt dann aber auch etwas zu dem clienten senden koennen.
das mache ich ja mit:


Delphi-Quelltext
1:
ServerSocket1.Socket.Connections[index].SendText('hallo');                    


wie bekomme ich jetzt aber den index raus? also wenn jemand connected sieht das so aus:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure Tfrmmain.ServerSocket1ClientConnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
ListView1.Items.Add;
ListView1.Items.Item[ListView1.Items.Count-1].Caption := socket.RemoteAddress;
ListView1.items.item[ListView1.items.count -1].SubItems.Add(inttostr(frmmain.ServerSocket1.Socket.ActiveConnections-1));
end;


wie man sieht mache ich das ziemlich umstaendlich mit dem index, aber es funktioniert. jetzt aber beim disconnect des clients kann ich den index ja nicht so herausfinden. wie krieg ich ihn da heraus??

ThX

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt


Narses - Do 29.11.07 21:21
Titel: Re: Index von connection herausfinden
Moin und :welcome: im Forum!

user profile iconopactium hat folgendes geschrieben:
wie bekomme ich jetzt aber den index raus? also wenn jemand connected sieht das so aus:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure Tfrmmain.ServerSocket1ClientConnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
ListView1.Items.Add;
ListView1.Items.Item[ListView1.Items.Count-1].Caption := socket.RemoteAddress;
ListView1.items.item[ListView1.items.count -1].SubItems.Add(inttostr(frmmain.ServerSocket1.Socket.ActiveConnections-1));
end;

wie man sieht mache ich das ziemlich umstaendlich mit dem index, aber es funktioniert. jetzt aber beim disconnect des clients kann ich den index ja nicht so herausfinden. wie krieg ich ihn da heraus?
Es ist nicht besonders "schlau", den Index einer Verbindung im .Connections[]-Array des TServerSocketals Kennung zu verwenden. :? Das Problem ist nämlich, dass sich dieser auch ändern kann (und wird, wie du bereits beim Disconnect festgestellt hast). :|

Eine Lösung besteht darin, die Referenz auf den TCustumWinSocketals Kennung zu verwenden, denn dieses Objekt ist für eine bestimmte Verbindung garantiert immer gleich. :idea: In diesem Tutorial [http://www.delphi-library.de/topic_54269.html] wird das z.B. so gemacht. ;) Weiterhin kann es sicher nicht schaden, mal hier einen Blick reinzuwerfen [http://www.delphi-library.de/topic_Datenpakete+bei+den+SocketKomponenten+auseinanderhalten_56194.html]. :les: :think: ;)

Übertragen auf dein TListView: ein TListItemhat die Eigenschaft .Data, dort kannst du z.B. diese Referenz ablegen.

cu
Narses


opactium - Fr 30.11.07 10:06

Ok danke. Ich habe mir das Tutorial schon mal angeschaut. Aber ich habe ziemlich früh dann aufgehört zu lesen. Ich habe auch schon in VB6 gecodet, und da gabs kein solches tut. Da war es für mich einfach logisch, dass man so die packete auseinanderhält. :D

werde mich aber heute abend nocheinmal mit dem TUT beschäftigen, damit ich auch noch das mit den Indexen kapier.

MfG